c - 带分配地址的数组声明

标签 c arrays pointers

正如我的老师告诉我的,数组声明不能接受地址作为赋值。

int a[]={1,2};
int b[2]=a;

这显示错误为无效的初始值设定项。 但我正在玩这些东西,发现 奇怪的例子如下。

int a[][3] = {1, 2, 3, 4, 5, 6};
int (*ptr)[3] = a;

这也是一个数组的声明,其地址与ptr指针保持一致,并且接受二维数组a的地址,但没有显示错误。 为什么,有人可以用简单的话向我解释一下吗?提前致谢。

最佳答案

在您的第二个示例中,ptr 不是一个数组,而是一个指向数组的指针

此指针使用 a 初始化,它是一个数组,在此上下文中,衰减 指向其第一个元素的指针。 a的类型是int [6][3],即大小为6的数组,其中每个元素都是int [3]<类型的数组。因此,指向 a 元素的指针的类型为 int (*)[3],它与 ptr 的类型匹配。

关于c - 带分配地址的数组声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272912/

相关文章:

c - fscanf 无法从 txt 文件读取数据

Javascript - Codepen 尝试使用数组更改我的 html 内容的顺序我的函数正在运行但不太好我不明白为什么

SwiftUI 系统光标

C - 交换单链表中的第一个和最后一个元素

c - NASM,指数宏程序还是子程序?

c - 如何删除字符串中的第一个条目

javascript - AngularJS - 通过 ng-if 获取过滤数组的长度

c - 将内存分配给C中的二维数组

c - 释放被覆盖的指针

c - C中(void *)变量和(void *)&变量是什么意思