我是一个初学者,我想了解多维数组的工作原理。
到目前为止,我已经收到了我不理解的代码段:
int arr[] = { 3, 5, 6, 7, 9 };
int (*ptr)[5] = &arr;
好的。 我知道ptr是一个指向5个元素的数组的指针。
但是'&'在做什么? ptr是否指向“ arr”的起始地址?但是“ arr”已经不是地址吗?那么为什么会有一个“&”呢? 也。索引5的意义是什么?因为当我尝试提供除5以外的其他任何数字时,都会引发错误。
对于所有听起来很傻的事我感到抱歉,但是我很困惑!救命!
答案 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
不是地址,而是一个数组。 &
是运算符的地址。