gpt4 book ai didi

c++ - 编译器在数组到指针衰减存储中生成的指针存储在哪里?

转载 作者:太空狗 更新时间:2023-10-29 19:53:39 26 4
gpt4 key购买 nike

根据 this

pointer is not stored as part of the array itself (or anywhere else in memory) when an array decays to pointer.

如果上面的说法是正确的,&array 的数据类型怎么可能不同于array&array[0] 但是这三个在以下声明中具有相同的值。

int array[10];

我认为当编译器默默地将数组衰减为指针时,它应该为指针提供一些内存地址。如果不是,那么指针存储在哪里?

提前致谢。

最佳答案

我不明白你从哪里得到指针必须存储在某个地方的想法。出于什么目的?没有 C++ 代码要求将该指针存储在任何地方。

当一个抽象的 C++ 机器评估类似的东西时

int a = 2, b = 3, c = 4;
int i = (a + b) * c;

内部子表达式 a + b 的计算结果为 5。但是,从语言的角度来看,5 并没有真正存储在任何地方。它只是 5 的临时值,存在的时间稍纵即逝,乘以 c 后就永远被遗忘了。在 C++ 中,这种无关紧要的表达式结果称为 rvalues。通常未指定右值所在的位置。在对上述表达式求值期间,5 的值可能会在某个 CPU 寄存器中出现片刻。或者,如果编译器决定这样做,它甚至可能暂时存储在某个未命名的内存区域中,但这不是您在 C++ 代码级别可以看到的东西。

从数组到指针转换产生的指针也是如此。该指针是一个右值 - 一个不存在于内存中任何位置的临时值。它根本不需要存在于内存中的任何地方。

不清楚您试图通过&array 引用表达什么。表达式&array不涉及数组到指针的转换,这意味着它与所讨论的问题完全无关。

关于c++ - 编译器在数组到指针衰减存储中生成的指针存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11870955/

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