油画人像图片:有关c语言的问题8

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/04 21:53:14
下列程序的输出结果是__
main()
{
int a[2][3]={10,20,30,40,50,60},(*p)[3];
p=a;
printf("%d",*(*(p+1)+2);
}
并解释一下,谢谢了?

60

指针数组

p+1第二行首地址(从0算起,0是第一行)
*(p+1)第二行第一列地址
*(p+1)+2第二行第3列元素地址
*(*(p+1)+2)第二行第三列元素
二维存储为
10 20 30
40 50 60
所以第二行第三列元素是60
即输出是60

60,
*(p+1)为数组中a[1][0]的地址,即40的地址
*(p+1)+2则为a[1][2]即60的地址
*(*(p+1)+2); 即60

最后结果是60,语句 p=a 是将二维数组的首地址赋给一个指针变量。

*(p+1)表示的是二维数组第二行的首地址,即数组中a[1][0]的地址,即40的地址
*(p+1)+2表示的是二维数组第二行第三列的地址,即为a[1][2]即60的地址
则*(*(p+1)+2); 即60