我想将这些c代码转换为c ++代码。这是关于指针printf
int n = 44;
//printf("n = %d \t &n = %x\n", n, &n);
cout<<"n ="<<n<< "\t" <<"&n ="<<hex<<int(&n)<<endl;
当我运行printf输出时是这样的:
n=44 &n=22ff1c
但是当我运行cout输出时是这样的:
n=44 &n=22ff0c
为什么这两个版本输出n的地址不同的值?
答案 0 :(得分:11)
编译器碰巧将堆栈分配的变量放在程序的不同版本中的不同位置。
尝试在同一程序中同时包含printf和cout版本,以便它们使用完全相同的指针。然后你会看到两个版本的行为方式相同。
int n = 44;
printf("n = %d \t &n = %x\n", n, &n);
cout<<"n ="<<n<< "\t" <<"&n ="<<hex<<int(&n)<<endl;
正如Lister先生正确指出的那样,在printf中打印指针时应使用%p格式字符串。
答案 1 :(得分:1)
您无法控制n
在内存中的位置。编译器可能会根据看似无关的其他事情来改变事物的位置。不要紧。您无权说n
应该去哪里;其他东西可能已经是你想放的地方了。
答案 2 :(得分:0)
假设你不是指空白的差异。在程序的每次运行中,在堆栈上分配n
的地址是不同的。否则,对我来说一切都好看!