二维数组指针小问题
//题目:求二维数组元素的最大值,并确定最大值元素所在的行和列#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;}
//在堆中开辟一个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] 可读性好
[解决办法]
#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;}