问题是这样的: 程序的输出是什么?
#include<stdio.h>
int main()
{
int A[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20} };
int (*v)[10]=A;
printf("**v=%d\n",**v);
printf("**(v+1)=%d\n",**(v+1));
printf("*(*v+1)=%d\n",*(*v+1));
printf("*(v[0]+1)=%d\n",*(v[0]+1));
printf("*(v[1])=%d\n",*(v[1]));
}
输出:
**v=1
**(v+1)=11
*(*v+1)=2
*(v[0]+1)=2
*(v[1])=11
特别是,我不太清楚*v是如何将数组A分成10份的,请告诉我每个输出的原因。 谢谢!
最佳答案
有一个概念叫做 array decay在上类。另外,将每个定义传递给 cdecl .
第二行是
declare v as pointer to array 10 of int
因此它是一个指向 10 个元素的数组的指针。该指针用 A
初始化——它指向的数组是 A
的第一行。
然后,v+1
是第一个元素之后的另一个指向包含 10 个元素的数组的指针。因此,它是 A
的第二行。
关于c - 关于C : pointer and Two-dimensional array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18054317/