在C语言中,如果我创建一个变量并像这样打印它的地址:
int a;
int main (void) {
printf ("%p", &a);
return 0;
}
输出结果为:00AA
同样的程序在C++中使用以下代码行:
cout << &a << endl;
输出结果为:0x8f970aa
这两者有什么区别?
我使用 Turbo C 编译了这两个程序。
0x8f970
... - Iharob Al Asimi0x8f97000
。但是,你真的期望不同的编译器将变量存储在完全相同的位置吗? - r3mainerprintf
时将其转换为void*
类型。 - chrisp
格式描述符的说明是:“指针的值以一种实现定义的方式转换为一系列打印字符*”,即使您使用Turbo C编译两个程序,即使变量以相同的相对地址布局,也没有特定的原因可以保证两者会产生相同的输出。猜测C版本是打印程序加载地址的偏移量,而不是绝对地址。 - John Bollinger