首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int (*p)[10]是如何工作的?

int (*p)[10]是如何工作的?
EN

Stack Overflow用户
提问于 2017-01-20 05:39:07
回答 3查看 1.1K关注 0票数 2

C++

代码语言:javascript
复制
int arr[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &arr;

我知道p是指向具有5个元素的数组的指针,但是当我试图打印地址时:

代码语言:javascript
复制
cout << p << "  " << *p << "  " << &arr << endl;

它给了我:

代码语言:javascript
复制
0x7fff50c91930  0x7fff50c91930  0x7fff50c91930

问题:

p怎么能等于*p?既然p等于&arr,为什么是*p != arr[0]p*p的值到底是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-20 05:56:46

可以更清楚地想象,p指向了whole memory block of 5 int。因此,如果有一个( p + 1 ),它将指向下一个内存块。

这有助于回答你的问题。

为什么p等于*p?

p是指向初始化为指向arr[5]的array5的指针。

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

现在p等于&arr,为什么*p != arr?

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

P和*p的值到底是多少?

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

票数 1
EN

Stack Overflow用户

发布于 2017-01-20 05:56:05

首先,' int‘这是int类型' int*’这是int指针类型,因此int arr5 = {1,2,3,4,5};//声明和初始化五个整数的数组int* p5;//声明由五个整数指针组成的数组。

指针只存储一个引用。当我们使用*取消引用时,它给出了存储在该引用中的实际值。

int*是一种类型,只*是运算符(非引用运算符)。

int (*p)5 = & arr ;//通过这样做,您将声明由五个整数指针组成的数组,并且每个指针都使用arr的起始引用进行初始化。

要使用整数指针获取arr的值,可以使用p//1p//2等,指针p1、p2等也是如此。

票数 0
EN

Stack Overflow用户

发布于 2017-01-20 06:00:17

数组的名称通常计算为数组的第一个元素的地址,但有两个例外:

  1. 当数组名称是一个相当大的操作数时。
  2. 当数组名称是一元操作数&(地址)时。

在这2种情况下,名称引用数组对象本身。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41756815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档