c++ - 指向整数数组的指针 C++

标签 c++ arrays pointers reference

我编写了以下代码来尝试理解我们如何使用指向数组的指针和对数组的引用。这是我对正在发生的事情的思考过程。

  1. arr 与数组第一个元素的地址相同。 *arrarr[0] 一样告诉我那个位置的 int 是什么。
  2. p 是一个指针,并被分配给 arr,这是第一个元素的地址。所以本质上 *p*arr 相同,p[0]arr[0].
  3. 在这里我不明白发生了什么。 arrPtr 是指向十个整数数组的指针。为什么 *arrPtrarrPtr[0] 不给我值 9?
  4. arrRef 是对十个整数数组的引用,与上面的点不同 *arrRefarrRef[0] 确实产生值9.

这是我的代码:

#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int main() {
    int arr[10] = {9, 18, 31, 40, 42};
    cout << "arr: " << arr << endl;
    cout << "*arr: " << *arr << endl;
    cout << "arr[0]: " << arr[0] << endl;
    cout << endl;

    int *p = arr;
    cout << "p: " << p << endl;
    cout << "*p: " << *p << endl;
    cout << "p[0]: " << p[0] << endl;
    cout << endl;

    int (*arrPtr)[10] = &arr;
    cout << "arrPtr: " << arrPtr << endl;
    cout << "*arrPtr: " << *arrPtr << endl;
    cout << "arrPtr[0]: " << arrPtr[0] << endl;
    cout << endl;

    int (&arrRef)[10] = arr;
    cout << "arrRef: " << arrRef << endl;
    cout << "*arrRef: " << *arrRef << endl;
    cout << "arrRef[0]: " << arrRef[0] << endl;
}

这是我的输出:

arr: 0xbf843e28
*arr: 9
arr[0]: 9

p: 0xbf843e28
*p: 9
p[0]: 9

arrPtr: 0xbf843e28
*arrPtr: 0xbf843e28
arrPtr[0]: 0xbf843e28

arrRef: 0xbf843e28
*arrRef: 9
arrRef[0]: 9

最佳答案

*arrPtrarrPtr[0]产生 int[10] 类型的对象

用于 operator <<数组被显式转换为 int * 类型的指针和重载的operator <<对于 const void * 的参数为这样的表达式选择。

可以看到这些输出

arr: 0xbf843e28

*arrPtr: 0xbf843e28
arrPtr[0]: 0xbf843e28

一致。

如果你想输出数组的第一个元素,你应该这样写

std::cout << **arrPtr << std::endl;
std::cout << ( *arrPtr )[0] << std::endl;
std::cout << arrPtr[0][0] << std::endl;
std::cout << *arrPtr[0] << std::endl;

为了更清楚你可以这样引入一个引用

int ( &arrRef )[10] = *arrPtr;

然后写

std::cout << *arrRef << std::endl;
std::cout << arrRef[0] << std::endl;

关于c++ - 指向整数数组的指针 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457364/

相关文章:

c++ - 套接字缓冲区中烦人的 NUL block

c++ - 使用标准列表的内存碎片?

java - 我不知道如何使用 while 循环来确保只有正确的名称才能跳出 while 循环

php - 当键以数字开头时如何访问 PHP 对象

javascript - 在每次迭代中循环 'n' 组中的元素

algorithm - 数据结构中的卫星信息是什么?

c++ - 如何在C++中复制指针数组的数据

swift - 指针取消引用 Swift

c++ - 格式化输出以显示在错误列表的消息部分

c++ - 如何防止 boost::optional<T> 被错误地构造为 0?