c - 关于C : pointer and Two-dimensional array

标签 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]));
}

输出:

**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/

相关文章:

php - 如何将数组与标识符合并?

java - 如何解决需要静态方法的 getter 问题?

c++ - 将结构指针复制到指针

c - 修改结构中的字符串

c - 通过管道传递 c 中的整个结构

c - 如何设置特定 pthread 的 CPU 关联性?

c - 这种类型的数据是什么意思?

c - 我们如何从 GLSL 中获取变量值?

javascript - 什么是 javascript 中的数组字面量表示法,什么时候应该使用它?

c - Malloc 返回 null