#include
int main(int argc, char** argv){
int a[3]={1,2,3};
int b[3]={4,5,6};
int c[3]={7,8,9};
int* p0[3]={a,b,c};
for(int i=0;i<3;i++){
for(int j=0;j<3;j++)
printf("%d ",*(*p0+3*i+j));
printf("\n");
}
printf("\n");
printf("\n");
int p1[3][3]={
{1,2,3},
{4,5,6},
{7,8,9}
};
for(int i=0;i<3;i++){
for(int j=0;j<3;j++)
printf("%d ",*(*p1+3*i+j));
printf("\n");
}
}
问题发现在数组的定义上,如果是直接定义二维数组,那么结果是正确的;如果改用指针数组的定义方式,结果是错误的
当然还有一点就是,如果p0数组改用别的输出方式,如下
printf("%d ",*(p0[i]+j));
printf("%d ",p0[i][j]);
那么结果也是正确的
想知道其内部的原理!
代码中的2个输出都不对
printf("%d ", *(*(p0 + i) + j));
这是对我回答不满意啊。道理都跟你说明白了,你不信那也是没办法。有时间跟你们老师确认一下吧,看看我说的对不对