【发布时间】:2021-08-01 15:42:23
【问题描述】:
所以我目前正在学习 C++,我只是想澄清一下我想出的一个东西。
假设我有一些数组int arr[] = {1, 2, 3};。int *arr_p = arr和int *arr_p = &arr[0]一样吗?
据我了解,arr 指向第一个元素,因此具有int * 类型,而&arr 是指向具有不同类型的整个数组的指针。
相同的地址,不同的类型。
指针的行为感觉有点不合逻辑,但我认为我越来越适应它们了。 提前谢谢你。
【问题讨论】:
-
int *arr_p = arr 和 int *arr_p = &arr[0] 一样吗? 简单的答案是肯定的。但是您的以下句子似乎无关紧要。在
&arr[0]中,您不是在使用&检查arr的地址,而是在检查arr[0]的地址,即int。 -
你是对的。
arr可能衰减为指向数组第一个元素的指针。顺便说一句,&arr是指向int(*)[3]类型数组的指针。 -
谢谢,我想我只是迷失了“衰变”过程,因此 arr 和 &arr[0](当然还有 &arr)之间的区别
-
还有一个问题:为什么它会衰减到
&arr[0]而不是&arr? -
重要的是要记住后缀运算符的优先级总是高于前缀,因此
&arr[0]等价于&(arr[0])而不是(&arr)[0]