c++ - printf() 和 std::cout 在指针方面的区别

标签 c++ c pointers printf cout

我是指针的新手,我想不出一件简单的事情。

   int main ()
{
    char *str1="pointer";
    printf("%p \n", str1);
    cout << str1<<endl;
    return 0;
}

输出如下:

0000000000409001
pointer

谁能解释一下这里的区别。 为什么 cout 不打印内存地址?如何让 cout 打印 str1 的地址?

最佳答案

格式说明符%p打印 void * , (不正确:所以 char * 被隐式转换为 void * ) char *转换为 void *打印前。 (但这实际上是未定义的行为,请参阅注释。正确的做法是 printf("%p", (void *) str1); )相应的 C++ 代码是 std::cout << (void *) str1 << '\n'; .

代码std::cout << str1;版画 str1作为空终止字符串。相应的 C 代码为 printf('%s', str1);

关于c++ - printf() 和 std::cout 在指针方面的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59130516/

相关文章:

c++ - 在 std::map 中使用 TiXmlElement vector

c - 读取文件的第一行在第一行给我一个 "\357\273\277"前缀

c - 如何避免在 Linux 中通过本地堆栈进行路由

c++ - Const 方法返回对 vector 元素的非常量引用

具有双重比较的 C++ 奇怪行为

c++ - 如何解释 IDA Pro 生成的这些代码?

c - 根据用户输入决定动态分配多少内存

c - 函数指针数组的使用

c - 为什么我不能递增数组?

c++ - 在不使用MySQL的INSERT关键字的情况下使用C在MySQL中的表中插入一行