%p 和 cout &ptr 之间的 C++ 区别
C++ difference between %p and cout &ptr
所以我有一段代码需要打印一个数字的地址和一个ptr的地址。
这是代码:
int main() {
float number1 = 1;
float number2;
float *fPtr;
fPtr = &number1;
cout << "Value of object pointed to by fPtr: " << *fPtr << endl;
cout << "Value of number 2: " << number2 << endl;
cout << "Address of number 1: " << &number1 << endl;
printf("%p\n", &number1);
cout << "Address fPtr: " << &fPtr << endl;
printf("%p", fPtr);
return 0;
}
输出为:
fPtr 指向的对象的值: 1
数字 2 的值:0
1号地址:0xbfb7e348
0xbfb7e348
地址 fPtr: 0xbfb7e34c
0xbfb7e348
为什么使用 %p 转换说明符打印的两个地址相同?当使用 & 时,地址不同,这是我所期望的,因为 number1 和 fPtr 保存在不同的地址中。
此外,我从语句 'printf("%p\n", &number1);' 中去掉了 &,return 值为 nil。谁能解释一下为什么?
在这里,您要打印 fPtr
的 地址 :
cout << "Address fPtr: " << &fPtr << endl;
在这里,您正在打印 fPtr
的 值 :
printf("%p", fPtr);
它们不是一回事。
如果要用printf
打印fPtr
的地址,则需要
printf("%p", &fPtr);
如果你想用std::cout
打印fPtr
的值,那么你需要
cout << fPtr << endl;
代码似乎缺少 printf 行中 fPtr 之前的 &。试试改成这样:
printf("%p", &fPtr);
Why are the two addresses printed using the %p conversion specifier the same?
嗯,你有
fPtr = &number1;
// ...
printf("%p\n", &number1);
// ...
printf("%p", fPtr);
如果两个 printf()
调用 而不是 打印相同的东西,那将是非常令人惊讶的,因为它们被要求打印的值是相等的。
In addition it I take away the & from the statement 'printf("%p\n", &number1);' the return value is nil. Could anyone explain why?
不,不是一般意义上的。当与转换说明符对应的参数不是适合该说明符的类型时,printf()
的行为未定义。 %p
说明符需要一个指针,但您传递了一个 double
(在适用的默认转换之后)。
所以我有一段代码需要打印一个数字的地址和一个ptr的地址。 这是代码:
int main() {
float number1 = 1;
float number2;
float *fPtr;
fPtr = &number1;
cout << "Value of object pointed to by fPtr: " << *fPtr << endl;
cout << "Value of number 2: " << number2 << endl;
cout << "Address of number 1: " << &number1 << endl;
printf("%p\n", &number1);
cout << "Address fPtr: " << &fPtr << endl;
printf("%p", fPtr);
return 0;
}
输出为:
fPtr 指向的对象的值: 1
数字 2 的值:0
1号地址:0xbfb7e348
0xbfb7e348
地址 fPtr: 0xbfb7e34c
0xbfb7e348
为什么使用 %p 转换说明符打印的两个地址相同?当使用 & 时,地址不同,这是我所期望的,因为 number1 和 fPtr 保存在不同的地址中。
此外,我从语句 'printf("%p\n", &number1);' 中去掉了 &,return 值为 nil。谁能解释一下为什么?
在这里,您要打印 fPtr
的 地址 :
cout << "Address fPtr: " << &fPtr << endl;
在这里,您正在打印 fPtr
的 值 :
printf("%p", fPtr);
它们不是一回事。
如果要用printf
打印fPtr
的地址,则需要
printf("%p", &fPtr);
如果你想用std::cout
打印fPtr
的值,那么你需要
cout << fPtr << endl;
代码似乎缺少 printf 行中 fPtr 之前的 &。试试改成这样:
printf("%p", &fPtr);
Why are the two addresses printed using the %p conversion specifier the same?
嗯,你有
fPtr = &number1;
// ...
printf("%p\n", &number1);
// ...
printf("%p", fPtr);
如果两个 printf()
调用 而不是 打印相同的东西,那将是非常令人惊讶的,因为它们被要求打印的值是相等的。
In addition it I take away the & from the statement 'printf("%p\n", &number1);' the return value is nil. Could anyone explain why?
不,不是一般意义上的。当与转换说明符对应的参数不是适合该说明符的类型时,printf()
的行为未定义。 %p
说明符需要一个指针,但您传递了一个 double
(在适用的默认转换之后)。