格式化指针的cout

format cout for pointer

本文关键字:cout 指针 格式化      更新时间:2023-10-16

我想将这些c代码转换为c++代码。这是关于的指针打印

int n = 44;
//printf("n   = %d t &n = %xn", n, &n);
cout<<"n ="<<n<< "t" <<"&n ="<<hex<<int(&n)<<endl;

当我运行printf输出时是这样的:

   n=44   &n=22ff1c

但当我运行cout输出时是这样的:

   n=44 &n=22ff0c

为什么这两个版本为n的地址输出不同的值?

编译器碰巧将堆栈分配的变量放在程序的不同版本中的不同位置。

尝试在同一程序中同时包含printf和cout版本,以便它们使用完全相同的指针。然后,您将看到这两个版本的行为方式相同。

int n = 44;
printf("n   = %d t &n = %xn", n, &n);
cout<<"n ="<<n<< "t" <<"&n ="<<hex<<int(&n)<<endl;

正如李斯特先生正确指出的那样,在printf中打印指针时应该使用%p格式字符串

您无法控制n在内存中的位置。编译器可能会根据其他看起来不相关的东西来改变事物的定位方式。这并不重要。你无权说n应该去哪里;其他东西可能已经在你想放的地方了。

假设您不是指空白的差异。在程序的每次运行中,在堆栈上分配n的地址是不同的。否则,我觉得一切都还可以!