c - 访问数组元素时指针的索引

标签 c arrays pointers

我是初学者,我想了解多维数组的工作原理。

到目前为止,我得到了这段我不理解的代码片段:

int arr[] = { 3, 5, 6, 7, 9 };
int (*ptr)[5] = &arr;

好的。 我知道 ptr 是一个指向 5 个元素的数组的指针。

但是 '&' 在做什么? ptr 是否指向'arr'的起始地址?但是“arr”不是一个地址吗?为什么会有一个'&'呢? 还。索引5的意义是什么?因为当我尝试给出 5 以外的任何其他数字时,它会引发错误。

如果这一切听起来很愚蠢,我很抱歉,但我很困惑!帮助!

最佳答案

在这里,您有一个变量 arr,类型为 array of 5 int:

int arr[] = { 3, 5, 6, 7, 9 };

在这里,您声明了一个指向 5 int 数组 的指针 ptr:

int (*ptr)[5]

这会获取 arr 的地址,类型为 pointer to array of 5 int

&arr

并且这个赋值有效,因为指针类型是相等的:

int (*ptr)[5] = &arr;

现在,如果您将 ptr 的类型更改为另一种类型,即 pointer to array of 6 int:

int (*ptr)[6];

然后分配不再有效,因为现在指针类型不匹配。这就是您收到错误的原因。

注意:此代码中的 [5] 索引任何内容,而只是变量声明的一部分(数组中的元素数)

关于c - 访问数组元素时指针的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55637226/

相关文章:

c - C/C++ 单元测试与 Maven 的集成

javascript - 我如何在 JavaScript 中将一个数字分成最多 100 个的 block ?

php - 如何在不在php中插入每个循环的情况下将数组插入数据库

c++ - 如何检查对象是否在数组中?

c - 将 C 指针与 char 数组一起使用

c++ - 如何初始化指针 vector ?

c - fscanf 一行读取两次

c++ - 守护进程不与通知发送交互

c - 如何在 C 编程中传递二维字符串数组?

Java - 在循环中打印逗号