格式cout指针

cad*_*dyT 4 c++ pointers cout

我想将这些c代码转换为c ++代码.这是关于指针printf

int n = 44;
//printf("n   = %d \t &n = %x\n", n, &n);
cout<<"n ="<<n<< "\t" <<"&n ="<<hex<<int(&n)<<endl;
Run Code Online (Sandbox Code Playgroud)

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

   n=44   &n=22ff1c
Run Code Online (Sandbox Code Playgroud)

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

   n=44 &n=22ff0c
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 11

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

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

int n = 44;
printf("n   = %d \t &n = %x\n", n, &n);
cout<<"n ="<<n<< "\t" <<"&n ="<<hex<<int(&n)<<endl;
Run Code Online (Sandbox Code Playgroud)

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

  • 但是没有关于如何使用`%x`来打印指针的评论?你们让我失望了. (3认同)