【问题标题】:Clarification Array Pointers in Cpp澄清 Cpp 中的数组指针
【发布时间】:2021-08-01 15:42:23
【问题描述】:

所以我目前正在学习 C++,我只是想澄清一下我想出的一个东西。

假设我有一些数组int arr[] = {1, 2, 3};
int *arr_p = arrint *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]

标签: c++ arrays pointers


【解决方案1】:

指向三个整数数组的指针可以写成如下,

int arr[3] = {2, 4, 6};

int (*Parr)[3] = arr;

如果您取消引用 Parr,您实际上可以访问整个数组,而不是数组的第一个元素。因此你可以写,

std::cout << (*Parr)[2] << std::endl;

这将允许您访问数组中的最后一个元素 (6)。请务必记住通过使用括号取消引用和使用索引来使用优先级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多