c++中char *p指针指向字符串输出问题

cpp 复制代码
     char *ss = "abcd";
     cout << endl;
     cout << *ss << endl << ss;// 输出a   abcd

这段C++代码的输出行为由指针的解引用和字符串存储机制决定,具体原理如下:

  1. 指针声明与初始化
    char *ss = "abcd" 使指针ss指向字符串常量"abcd"的首地址(即字符'a'的地址)。

  2. 输出*ss的原理

    • *ss是对指针的解引用操作,获取指针当前指向的单个字符
    • 由于ss指向字符串首地址,故*ss等价于ss[0],输出第一个字符'a'
  3. 输出ss的原理

    • 直接输出ss时,cout会将其识别为C风格字符串的起始地址
    • 从该地址开始连续输出字符,直到遇到终止符'\0',因此完整输出"abcd"
  4. 内存布局示例

    复制代码
    地址   值
    0x1000 'a'  ← ss指向这里
    0x1001 'b'
    0x1002 'c'
    0x1003 'd'
    0x1004 '\0'
    • *ss0x1000处的值'a'
    • ss0x1000开始输出直到'\0'

注意:现代C++应使用const char*声明字符串指针,避免修改字符串常量导致未定义行为。

相关推荐
君顾16 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生6 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
平头哥技术团队7 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
乌萨奇也要立志学C++7 小时前
【洛谷】kmp算法
开发语言·算法
传奇开心果编程7 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
m0_380743877 小时前
给 Claude API 调用补上超时重试和错误分类
开发语言·人工智能·php
Draw Stars7 小时前
Git BASH安装教程
开发语言·git·bash
vortex58 小时前
一文讲透 Zsh 与 Bash 的区别
开发语言·bash
千谦阙听8 小时前
C++类和对象(中):默认成员函数、构造与析构、拷贝构造、运算符重载
开发语言·c++·学习
weixin_307779138 小时前
一维无粘 Burgers 方程的激波形成问题:MacCormack 格式求解
c++·算法·matlab