读书人

二维数组指针小疑点

发布时间: 2012-03-17 19:06:28 作者: rapoo

二维数组指针小问题

C/C++ code
//题目:求二维数组元素的最大值,并确定最大值元素所在的行和列#include<stdio.h>int main(){    int a[3][4]={{3,17,8,11},{66,7,8,19},{12,88,7,16}};    int *p=a[0],max,row,col,i,j;    max=a[0][0];    for(i=0;i<3;i++)       for(j=0;j<4;j++)       {         //if(*(p+i*4+j)> max)           if(*(*(p+i)+j)>max)         {           //max=*(p+4*i+j);               max=*(*(p+i)+j);           row=i;           col=j;         }       }       printf("a[%d][%d]=%d\n",row,col,max);       return 0;}

//划掉的是对的,我就是不明白为什么*(p+i*4+j)可以,但是*(*(p+i)+j);这个就不可以,你都是表示ai][j]吗?
编译提示是:
error C2100: illegal indirection



[解决办法]
p的类型为int*, *(p+i)的类型为int,你对int型变量不能用*,需要转化成指针。
if(*(*(p+i)+j)>max)
-->
if(*((int*)(*(p+i)+j))>max)

max=*(*(p+i)+j);
-->
max=*((int*)(*(p+i)+j));

[解决办法]
仅供参考
C/C++ code
//在堆中开辟一个4×5的二维int数组#include <stdio.h>#include <malloc.h>int **p;int i,j;void main() {    p=(int **)malloc(4*sizeof(int *));    if (NULL==p) return;    for (i=0;i<4;i++) {        p[i]=(int *)malloc(5*sizeof(int));        if (NULL==p[i]) return;    }    for (i=0;i<4;i++) {        for (j=0;j<5;j++) {            p[i][j]=i*5+j;        }    }    for (i=0;i<4;i++) {        for (j=0;j<5;j++) {            printf(" %2d",p[i][j]);        }        printf("\n");    }    for (i=0;i<4;i++) {        free(p[i]);    }    free(p);}//  0  1  2  3  4//  5  6  7  8  9// 10 11 12 13 14// 15 16 17 18 19
[解决办法]
直接a[i][j] 可读性好
[解决办法]
C/C++ code
#include<stdio.h>int main(){    int a[3][4]={{3,17,8,11},{66,7,8,19},{12,88,7,16}};    int max,row,col,i,j;    int (*p)[4] =a;//这里把p的定义改一下就ok了    max=a[0][0];    for(i=0;i<3;i++)        for(j=0;j<4;j++)        {            //if(*(p+i*4+j)> max)            if(*(*(p+i)+j)>max)            {                //max=*(p+4*i+j);                max=*(*(p+i)+j);                row=i;                col=j;            }        }        printf("a[%d][%d]=%d\n",row,col,max);        return 0;} 

读书人网 >C++

热点推荐