注册 登录
编程论坛 C++教室

二维数组指针问题 求解

终止节奏 发布于 2015-03-23 20:34, 361 次点击
#include <iostream>
using namespace std;
int main()
{
    int a[5][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}},i,j,max;
    int *p;
    p=&a[0][0];
    max=*p;
    for(i=0;i<=4;i++)
    {
        for(j=0;j<=4;j++)
        {
            if(*(*(p+i)+j)>max)
            {
                max=*(*(p+i)+j);
            }
        }
    }
    cout<<"max="<<max<<endl;
    return 0;
}




VC下面显示这个错误:error C2100: illegal indirection

哪里不正确 求解
3 回复
#2
终止节奏2015-03-23 20:35
求最大值的一道题
#3
yangfrancis2015-03-23 21:25
if判断的时候*用多了。另外,如果单纯地用(p+i)+j取地址的话,由于i,j的最大值都只能是4,所以无论怎么循环下去,最末一个地址只能是p+8,要想循环到最后一项a[4][4],循环条件改成if(*((p+i)+j*5)>max),如下代码可行,已测试。
#include <iostream>
using namespace std;
int main()
{
    int a[5][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}},i,j,max;
    int *p;
    p=&a[0][0];
    max=*p;
    for(i=0;i<=4;i++)
    {
        for(j=0;j<=4;j++)
        {
            if(*((p+i)+j*5)>max)//这行和下一行作一下改动
            {
                max=*((p+i)+j*5);
            }
        }
    }
    cout<<"max="<<max<<endl;
    return 0;
}
#4
yangfrancis2015-03-23 21:31
声明一下,以上代码所测试地址不是顺序进行的,有点乱。顺序是p, p+5, p+10... p+20, p+1, p+6, p+11...
或者说检测顺序是a[0][0],a[0][1],a[0][2]...a[1][0],a[1][1],1[1][3]...
1