c++ - int (*p)[10] 是如何工作的?

标签 c++ pointers

<分区>

C++

int arr[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &arr;

我知道 p 是一个指向包含 5 个元素的数组的指针,但是当我尝试打印地址时:

cout << p << "  " << *p << "  " << &arr << endl;

它给了我:

0x7fff50c91930  0x7fff50c91930  0x7fff50c91930

问题:

p 怎么会等于 *p?现在 p 等于 &arr,为什么 *p != arr[0]p*p 的值到底是什么?

最佳答案

enter image description here

想象一下p指向5个int的整 block 内存会更清楚。所以如果有 ( p + 1 ) 它将指向下一个内存块。


这有助于回答您的问题。

How could p equals *p?

p 是指向数组 [5] 的指针,它被初始化为指向 arr[5]

*p 是第一个数组元素的值 - 即 arr[5] 的地址。并且因为数组的名称是第一个元素的地址。因此,当您打印 p*p 时,它们是相同的。

And now that p equals to &arr, why *p != arr[0]?

*p 是第一个数组元素的地址 - 这意味着整个 arr[5] 内存块的地址。另一方面,arr[0]p 指向的数组的第一个元素,因此它是一个真实值 (1)不是地址。

What exactly does the value p and *p hold?

作为你的第一个问题,它们都保存了整个arr[5] 内存块的地址。

关于c++ - int (*p)[10] 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41756815/

相关文章:

c++ - 仅在尚未打开 CHM 文件时打开它

c++ - 使用带有 C MPI 函数的 boost 序列化

C++在派生类中初始化基类的const int?

c++ - 递归可变参数模板函数调用 "loses"指针在第二个参数类型上

c - 如何使用scanf函数打印字符串的第n项?

C++ 错误 LNK2001,找不到错误

c++ - 是否有任何免费程序可以制作从头文件中提取的文件依赖关系图?

c++ - 如何在 C++ 中连接两个结构类型变量?

c++ - 单链表时间

c - 使用多维数组时,使用指向该数组的指针与使用实际数组名称作为指针有什么区别