关于C:指针和二维数组

gfz*_*zhu -5 c arrays pointers

这是一个问题:该计划的输出是什么?

#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]));
}
Run Code Online (Sandbox Code Playgroud)

输出:

**v=1
**(v+1)=11
*(*v+1)=2
*(v[0]+1)=2
*(v[1])=11
Run Code Online (Sandbox Code Playgroud)

特别是,我不太清楚*v如何将阵列A分成10个部分,请告诉我每个输出的原因.谢谢!

Mih*_*eac 8

工作中有一个叫做阵列衰减的概念.另外,通过cdecl传递每个定义.

第二行是

将v声明为指向int数组10的指针

因此它是一个指向10个元素数组的指针.该指针初始化为A- 它指向的数组是第一行A.

然后,v+1是第一个指向10个元素的数组的另一个指针.因此,它是第二排A.