当前位置: 首页 > news >正文

在c++中,char定义的变量取地址时,为什么会输出 “烫烫烫...“?

在 C++ 中,当你直接输出 char* 指针(比如 &b)时,std::cout 会将其视为 C 风格字符串(即以 '\0' 结尾的字符数组),而不是内存地址。因此,它会尝试从 b 的地址开始读取内存,直到遇到 '\0' 为止,但由于 b 只是一个单独的 char,后面的内存内容是未初始化的(可能是垃圾值),所以会输出乱码(如 “烫烫烫…”)。


为什么会输出 “烫烫烫…”?

  1. &b 被当作字符串处理
    std::coutchar* 有特殊处理,会把它当作字符串的起始地址,并尝试打印直到 '\0' 结束。但由于 b 只是一个字节,后面的内存可能是随机数据,导致乱码。

  2. “烫烫烫…” 的由来

    • 在 Windows 的 Debug 模式下,未初始化的栈内存通常会被填充为 0xCC(MSVC 编译器的调试模式行为)。
    • 0xCC 在 GBK 编码下对应汉字 “烫”,所以连续输出多个 0xCC 就会显示为 “烫烫烫…”。

如何正确输出 char 变量的地址?

如果你想输出 char 变量的 内存地址,而不是把它当作字符串,你需要将 &b 强制转换为 void*

char b;
std::cout << "变量 b 的地址:" << static_cast<void*>(&b) << std::endl;

或者:

std::cout << "变量 b 的地址:" << (void*)&b << std::endl;

这样 std::cout 就不会把它当作字符串,而是直接输出指针的地址值。


示例代码

#include <iostream>int main() {char b;std::cout << "错误的输出方式(当作字符串处理): " << &b << std::endl;  // 可能输出乱码std::cout << "正确的输出方式(强制转为 void*): " << static_cast<void*>(&b) << std::endl;  // 输出真实地址return 0;
}

总结

  • std::coutchar* 特殊处理,会尝试打印字符串,而不是地址。
  • 未初始化的内存可能包含垃圾值,导致输出乱码(如 “烫烫烫…”)。
  • 正确做法是强制转换为 void*,这样 std::cout 会直接输出地址值。

这样可以避免乱码,正确显示变量的内存地址。

    int a;char b;bool c;string d;std::cout<<"变量a的地址:"<<&a<<std::endl;std::cout<<"变量b的地址:"<<&b<<std::endl;std::cout<<"变量c的地址:"<<&c<<std::endl;std::cout<<"变量d的地址:"<<&d<<std::endl;std::cout<<"改成================="<<std::endl;std::cout<<"变量a的地址:"<<(void*)&a<<std::endl;std::cout<<"变量b的地址:"<<(void*)&b<<std::endl;std::cout<<"变量c的地址:"<<(void*)&c<<std::endl;std::cout<<"变量d的地址:"<<(void*)&d<<std::endl;

相关文章:

  • 【在Spring Boot中集成Redis】
  • LeetCode - 1137.第N个泰波那契数
  • 学习黑客色即是空
  • python使用cv2在图片上标点
  • 二、shell脚本--变量与数据类型
  • c++_2011 NOIP 普及组 (1)
  • WebSocket分布式实现方案
  • 【LLaMA-Factory实战】1.3命令行深度操作:YAML配置与多GPU训练全解析
  • 数据库 1.0
  • wpf CommandParameter 传递MouseWheelEventArgs参数 ,用 MvvmLight 实现
  • 里氏替换原则(LSP)
  • Java 网络安全新技术:构建面向未来的防御体系
  • 强化学习--2.数学
  • 【Java学习】通配符?
  • 内存性能测试方法
  • 如何通过文理工三类AI助理赋能HI,从而,颠覆“隔行如隔山”的旧观念和“十万小时定律”的成长限制
  • 穿越数据森林与网络迷宫:树与图上动态规划实战指南
  • 【CF】Day50——Codeforces Round 960 (Div. 2) BCD
  • AVFormatContext 再分析零
  • 《告别试错式开发:TDD的精准质量锻造术》
  • 正荣地产:公司控股股东已获委任联合清盘人
  • “鱼米之乡”江苏兴化的产业哲学:以融合与创新重构价值链条
  • 48岁黄世芳履新中国驻毛里求斯大使,曾在广西工作多年
  • 今晚上海地铁多条线路加开定点加班车,2号线运营至次日2时
  • 国铁集团:铁路五一假期旅客发送量累计已超1亿人次
  • 伊朗港口爆炸事故遇难人数最终确定为57人