指针遍历二维数组

#includeint f1(int (*q)[3]); int f2(int (*p)[3]); int main() { int a[3][3]={ {1,2,3}, {4,5,6}, {7,8,9} }; char s[3][100]={ {"Hello World!"}, {"How are you?"}, {"What's the hell are you fucking that."} }; int *p1=&a[0][0]; int (*q)[3]=a; char (*pstr)[100]=s; int i; int j; int sum1=0; int sum2=0; int sum3=0; int sum4=0; int sum5=0; int sum6=0; for(i=0; i<3; i++){ for(j=0; j<3; j++){ sum1=sum1+*(*(q+i)+j); } }for(i=0; i<3; i++){ for(j=0; j<3; j++){ sum2=sum2+*(p1+i*3+j); } }for(i=0; i<3; i++){ for(j=0; j<3; j++){ sum3=sum3+*p1; p1++; } }for(i=0; i<3; i++){ int *p2=q; for(j=0; j<3; j++){ sum4=sum4+*p2; p2++; } q++; } q=a; sum5=f1(q); sum6=f2(q); printf("sum1=%d\nsum2=%d\nsum3=%d\nsum4=%d\nsum5=%d\nsum6=%d\n",sum1,sum2,sum3,sum4,sum5,sum6); for(i=0; i<3; i++){ printf("%s\n",*(pstr+i)); } return 0; }int f1(int (*q)[3]) { int ret=0; int i; int j; for(i=0; i<3; i++){ for(j=0; j<3; j++){ ret=ret+q[i][j]; } } return ret; }int f2(int (*p)[3]) { int ans=0; int i; int j; for(i=0; i<3; i++){ for(j=0; j<3; j++){ ans=ans+*(*(p+i)+j); } } return ans; }

【指针遍历二维数组】运行结果:
指针遍历二维数组
文章图片

    推荐阅读