#include<stdio.h>
#include<conio.h>
void main()
{
int a[3][2]={{4,7},{6,5},{9,1}};
int i,j;
clrscr();
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
printf("%d ",*(a[j]+i));
}
getch();
}
这里的a[i]
是 int (*)[2]
类型。所以当我们执行 *(a[0]+1)
时,它应该转到下一行并打印 6 对吗?为什么打印 7?
最佳答案
a[0]
是一个包含 2 个整数且值为 {4,7}
的数组。它的类型为 int[2]
。当在大多数表达式中使用时,它会自动衰减为指向其第一个元素的指针,即类型 int*
指向 4
。将其递增 1 使其指向下一个 int
,即 7。
*(a[j]+i)
更清晰的写法是 a[j][i]
。这做同样的事情,因为 p[x]
被定义为 *(p+x)
。
关于c - 递增一个 D 数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45771640/