代码如下:
main()
{ int a[3][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8}};int i;
int (*p)[4]=a,*q=a[0];
for(i=0;i<3;i++)
{ if(i==0)
(*p)[i+i/2]=*q+1;
else
p++,++q;
}
for(i=0;i<3;i++)
printf("%d,",a[i][i]);
printf("%d,%d\n",*((int *)p),*q);
}
问: 输出的结果是多少?
int (*p)[4]=a; 这句话定义了一个指针P指向了一个int 型的数组,这个数组容量为4。它等于a,那么,p指向的就是二维数组的第一行。
*q=a[0];这句话定义了一个指针q,它指向的是a[0],那么就是二维数组的第一行的数组的首地址。
for(i=0;i<3;i++)
{ if(i==0)
(*p)[i+i/2]=*q+1;
else
p++,++q;
}
这个循环第一次 ,(*p)[0] = *q + 1 也就是将a[0][1]的值赋值给a[0][0] 。然后p的指针往下移一行,q往后移一列 。如此两次。p指向第三行,q指向第三列。
printf("%d,%d\n",*((int *)p),*q);这句代码的意思就是,p指针强制类型转换指向int型,再取值,那就是P指向的5,取出q的值,就是3
那么最终答案是 2,4,7,5,3
具体图如下: