我想将这些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格式字符串.