gpt4 book ai didi

c++ - C和C++中存储和显示的地址有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 14:56:50 26 4
gpt4 key购买 nike

在 C 中,如果我创建一个变量并像这样打印它的地址:

int a;
int main (void) {
printf ("%p", &a);
return 0;
}

输出为:00AA

C++ 中的同一程序使用以下行:

cout << &a << endl;

输出是:0x8f970aa

这两者有什么区别?

我使用 Turbo C 编译了这两个程序。

最佳答案

除非您使用一些特殊的、特定于系统的链接器文件,否则无法保证您的变量最终将位于内存中的哪个地址。它甚至可能在同一个编译器上从一个编译到另一个编译在不同的地方结束。当然,不同的编译器会有不同的行为。没有标准说明他们应该如何分配变量。

这与 C 与 C++ 无关。这两个标准都声明您的变量应该分配静态存储持续时间。 C 和 C++ 标准保证所有未明确初始化的静态存储持续时间变量都初始化为零(例如,参见 C11 6.7.9/10)。

这意味着两个标准都间接保证变量分配在.bss中。 .bss 中的确切位置 未在任何地方指定。

Related question .

关于c++ - C和C++中存储和显示的地址有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303926/

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