【发布时间】:2012-08-22 13:52:25
【问题描述】:
main()
{
int a[3][2] = { {1,2},{3,4},{5,6}};
for(int i=0;i<3;i++)
for(int j=0;j<2;j++)
{
printf("%d", a[i][j]);
printf("\t %d\n", &a[i][j]);
}
printf("\n%d", *(a+1));
printf("\n%d", *a+1);
}
*(a+1) 的输出与 *a+1 不同。
*(a+1) 指向第三个元素,而
*a+1 正在输出第二个值
【问题讨论】:
-
请参阅 this question 以获得很好的解释。
-
阅读comp.lang.c FAQ的第6节。
-
*(a+1)正在为您打印第三个元素,因为在您的主机环境中,sizeof(int *)似乎是sizeof(int)的两倍。*a+1仅打印第二个值,因为它实际上使用了第一个值(*a,即1)并向其添加1,这恰好产生了第二个值。 -
@veer:数组的每个元素都是
int[2],而不是int*。因此,它增加了sizeof(int[2]),而不是sizeof(int*) -
@veer int (*p)[2]; p = &a[0]; printf("%d\n", *(p+1)); printf("%d\n", (p+1));为什么这两个语句返回相同的值