【发布时间】:2020-03-26 13:40:39
【问题描述】:
我是指针新手,但我无法弄清楚一件简单的事情。
int main ()
{
char *str1="pointer";
printf("%p \n", str1);
cout << str1<<endl;
return 0;
}
输出如下:
0000000000409001
pointer
谁能解释一下这里的区别。 为什么 cout 不打印内存地址?如何让 cout 打印 str1 的地址?
【问题讨论】:
-
这里的差异是由您提供的
printf的格式说明符(%p)造成的。 -
虽然洪流发生在下面,你能详细说明你的困惑点吗?很清楚你已经知道
%p对printf做了什么。您是否感到困惑,为什么std::cout << strnot 打印指针值,而是打印字符串内容?如果是这样,这是由于输出流上的运算符重载,其中库提供的rhschar*重载将钻入字符串并实际打印内容而不仅仅是地址。跨度> -
简短回答:在 C++ 中,当您使用
<<和cout打印某些内容时,您会得到一个旨在最大程度地有用和方便的默认格式。对于int,您会得到类似%d的信息。对于char *,您会得到类似%s的信息。要获得更像%p的内容,请参阅下面@tmlen 的答案。 -
@SteveSummit 非常感谢。
标签: c++ c pointers printf cout