c++ - 为什么打印 char 类型变量的引用会返回其中的值?
问题描述
代码片段:
#include <iostream>
int main()
{
char c = 50;
int i = 50;
std::cout<<&c<<"\n";
std::cout<<*(&c)<<"\n";
std::cout<<&i<<"\n";
return 0;
}
预期输出:
<memory_address>
2
<memory_address>
原始输出:
2
2
0x7ffee0504ac4
困惑 :
我认为&
在这种情况下应该返回变量的引用,打印哪个(根据我)应该给我一个内存地址,这对于其他数据类型的变量来说是正确的,int
例如float
double
那么为什么在 type 的情况下char
,它会显示其中的值呢?
编译器 = clang-1103.0.32.62
解决方案
operator<< (const char*)
这是因为ostream的过载。
&c
是类型char*
,并operator<<
尝试打印以 0 结尾的 C 字符串。如果您转换为 void* ,(void *)(&c)
那么您将按预期获得内存地址:
#include <iostream>
int main()
{
char c = 50;
int i = 50;
std::cout<<&c<<"\n"; // this will try to print null-terminated char* string.
std::cout << (void*)(&c) << "\n"; // this will print memory address as expected
std::cout<<*(&c)<<"\n";
std::cout<<&i<<"\n";
return 0;
}
注意:cout << &c
可能会打印更多字符,具体取决于内存地址后面存在哪些字节&c
(0 字节可能远远落后)。所以这基本上是未定义的行为(UB)。
推荐阅读
- mysql - 在sql中转换值后如何从其他表中添加列?
- python - python中字典中的重复键
- c# - 至少一个对象必须实现 icomparable。降序C#
- javascript - 如何在sql server中将日期时间转换为数字
- django - 由于 models.DO_NOTHING,FOREIGN KEY 约束失败
- django - 如何仅将查询集的值转换为 django 中的新字典数组
- reporting-services - SSRS 2016 自定义工具栏
- java - Java 正则表达式按值提取和替换
- android - 从 react native android app 在whatsapp上分享图片
- php - 将特定的 txt 文件解析为 csv 时避免排除相似的行