二维数组指针小问题
- 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;}