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

时间:2019-04-11 16:27:41

标签: c arrays pointers

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

到目前为止,我已经收到了我不理解的代码段:

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

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

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

对于所有听起来很傻的事我感到抱歉,但是我很困惑!救命!

2 个答案:

答案 0 :(得分:1)

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

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

在这里,您声明指向ptr的指针array of 5 int

int (*ptr)[5]

这将获得类型为arr的{​​{1}}的地址

pointer to array of 5 int

,并且由于指针类型相同,因此此分配有效:

&arr

现在,如果您将int (*ptr)[5] = &arr; 的类型更改为另一种类型,即ptr

pointer to array of 6 int

然后分配将不再起作用,因为指针类型现在不匹配。这就是为什么您会得到一个错误。

注意:这段代码中的int (*ptr)[6]; 不会对任何内容编制索引,而是仅仅是变量声明(数组中元素的数量)的一部分

答案 1 :(得分:0)

您的数组只有一个维度,因此不是多维的。

您的数组有5个元素,并且由于数组是从零开始的,因此访问元素[5](第六个元素)实际上会导致未定义的行为。

arr不是地址,而是一个数组。 &是运算符的地址。