gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:24:41 25 4
gpt4 key购买 nike

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

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

然而对我来说,一个 pointer是一个内存区域,用于保存另一个内存区域的地址,因此:
int *p = a;

可以这样画:
-----              -----
p ---------> a[0]. .....
----- -----
0x1 0x9

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

最佳答案

"But a itself is not pointing to another region of memory, it IS the region of memory itself.

"So when the compiler converts it to a pointer, does it save it (like p) somewhere in memory or it's an implicit conversion?"


这是一种隐式转换。编译器不会在内存中创建单独的指针对象(您可以以任何方式分配不同的内存地址)来保存第一个元素的地址。
标准规定(强调我的):

"Except when it is the operand of the sizeof operator, or the unary & operator, or is a string literal used to initialize an array, an expression that has type "array of type" is converted to an expression with type "pointer to type" that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined."

Source: ISO/IEC 9899:2018 (C18), 6.3.2.1/4


数组被转换为指针类型的表达式,它不是 lvalue .
编译器只计算 a&a[0] (指向 a[0] 的指针)。

"I understand that array names are converted to pointers."


数组并不总是转换为指向其第一个元素的指针。看看上面引用的第一部分。 F.e.当用作 &a , a不会衰减到指向其第一个元素的指针。相反,它获得了一个指向整个数组的指针 int (*)[3] .

关于c - 指向指针衰减的数组是否更改为指针对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62345429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com