指向指针衰减的数组是否已更改为指针对象?

用户13731031
int a[] = {1, 2 ,3};

我知道数组名称会转换为指针。经常使用的术语是它们衰减到指针。

但是对我来说,apointer是一个内存区域,它将地址保存到另一个内存区域,因此:

int *p = a;

可以这样绘制:

-----              -----
  p    --------->  a[0].  .....
-----              -----
 0x1                0x9

但是a它本身并不指向内存的另一个区域,而是内存本身的区域。因此,当编译器将其转换为指针时,是否将其保存(如p)在内存中的某个位置,或者是隐式转换?

RobertS支持Monica Cellio

“但是a它本身并不指向存储器的另一个区域,而是存储器本身的区域。

“因此,当编译器将其转换为指针时,它是否将其保存(例如p)在内存中的某个位置,或者是隐式转换?”

这是一个隐式转换。编译器未实现在内存中创建单独的指针对象(您可以用任何方式为其分配不同的内存地址)以保存第一个元素的地址。

标准状态(强调我的):

“除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则类型为“ array of type”的表达式将转换为类型为“ pointer to type”的表达式“它指向数组对象的初始元素,而不是左值。如果数组对象具有寄存器存储类,则行为未定义。”

资料来源:ISO / IEC 9899:2018(C18),6.3.2.1/4

该数组将转换为指针类型的表达式,而不是lvalue

编译器只是计算a&a[0](指针a[0])。


“我知道数组名称会转换为指针。”

数组并不总是转换为指向其第一个元素的指针。请看上面报价的第一部分。Fe用作时&aa不会衰减为其第一个元素的指针。而是获得指向整个数组的指针int (*)[3]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++:指向指针衰减问题的数组

来自分类Dev

C ++:指向指针衰减问题的数组

来自分类Dev

2D数组不会衰减到指向指针的指针

来自分类Dev

2D数组不会衰减到指向指针的指针

来自分类Dev

QT中数组指针对象的指针

来自分类Dev

T 数组的函数参数“衰减”指向 T 的指针?

来自分类Dev

删除指向对象的指针的指针数组

来自分类Dev

指向对象指针数组的指针的深层复制

来自分类Dev

指向指针数组的指针

来自分类Dev

指针是否需要指向已分配的类数组中的第一个对象才能使用“删除 [] ptrName”?

来自分类常见问题

数组衰减到指针的异常?

来自分类Dev

通过指向int的指针对char数组进行别名是否合法?

来自分类Dev

双指针对象数组-克隆元素

来自分类Dev

如何在指向字符串的指针数组中将首字母更改为大写?

来自分类Dev

指向可以更改指针的对象的智能指针

来自分类Dev

初始化指向对象数组的指针

来自分类Dev

C ++制作指向const对象的指针数组

来自分类Dev

销毁指向数组中对象的指针

来自分类Dev

指向C ++中对象数组的指针

来自分类Dev

初始化指向对象数组的指针

来自分类Dev

创建指向对象的空指针数组

来自分类Dev

如果考虑到数组衰减,我只有指向第一个数组元素的指针,是否可以找到数组的长度?

来自分类Dev

C ++-创建指向包含类对象指针的数组元素的指针

来自分类Dev

如何从指向指针数组的指针中删除对象?

来自分类Dev

指向数组中指针的指针

来自分类Dev

指向函数指针数组的指针

来自分类Dev

指向指针向量的指针数组

来自分类Dev

C - 指向指针数组的指针

来自分类Dev

C:指针数组与指针对指针

Related 相关文章

热门标签

归档