printf() 和 std::cout 在指针方面的区别
difference between printf() and std::cout with respect to pointers
我是指针新手,我无法弄清楚一件简单的事情。
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
打印为以 null 结尾的字符串。相应的 C 代码将被printf('%s', str1);
指针是指向内存中某个位置的地址。
"pointer"
是内存中的 C 字符串,字母为 8 个字节,终止 NULL 字节。str1
是指向第一个字母'p'
的字节的指针。
printf("%p", str1)
打印指针本身的值,即内存地址(在本例中为0000000000409001
(。
printf("%s", str1)
会打印pointer
,C字符串在位置str1
的内容。
cout << str1 << endl
还打印 C 字符串的内容。这是类型char*
指针的默认行为,因为它们通常是字符串。
cout << static_cast<void*>(str1) << endl
将再次打印指针的地址。
char* 是指向字符数组开头的指针。
cout
"识别"字符*并将其视为字符串。
您显式告诉 printf(( 使用 %p 格式化程序打印出指针地址的十进制表示形式。
您显式告诉 printf(( 使用 %p 格式化程序打印出指针地址的表示形式。
编辑:根据注释进行编辑以确保准确性
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 为什么我的代码在指针方面停止运行?
- printf() 和 std::cout 在指针方面的区别
- C 中的指针和功能方面的麻烦
- 在C++中,a+i 和 &a[i] 在指针算术方面有什么区别?
- 提升快速池分配器在函数指针方面存在问题
- 在结构指针方面需要帮助
- 指针在内存缓存方面的性能
- c++指针和指针的标识在内存分配方面