#include <stdio.h>
int main()
{ inta[3][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8}};
inti;
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是指向数组的指针,(*p)[4]中存放的是数组a每行的首地址,
而*q是指向第一行第一个元素。
if(i==0)
(*p)[i+i/2]=*q+1;
得出(*p)[0] = *q + 1; 得出第一行第一个元素被第一行第二个元素赋值2,
for(i=0;i<3;i++)
printf("%d,",a[i][i]);
先输出a[0][0],a[1][1],a[2][2],2, 4, 7;
for(i=0;i<3;i++)
{ if(i==0)
(*p)[i+i/2]=*q+1;
else
p++,++q;
}
printf("%d,%d\n",*((int *)p),*q);
*q指向第一行第三个元素。
得出: 5,3;
此题最后的答案是:2,4,7,5,3;