cpp
char *ss = "abcd";
cout << endl;
cout << *ss << endl << ss;// 输出a abcd
这段C++代码的输出行为由指针的解引用和字符串存储机制决定,具体原理如下:
-
指针声明与初始化
char *ss = "abcd"
使指针ss
指向字符串常量"abcd"
的首地址(即字符'a'
的地址)。 -
输出
*ss
的原理*ss
是对指针的解引用操作,获取指针当前指向的单个字符- 由于
ss
指向字符串首地址,故*ss
等价于ss[0]
,输出第一个字符'a'
。
-
输出
ss
的原理- 直接输出
ss
时,cout
会将其识别为C风格字符串的起始地址 - 从该地址开始连续输出字符,直到遇到终止符
'\0'
,因此完整输出"abcd"
。
- 直接输出
-
内存布局示例
地址 值 0x1000 'a' ← ss指向这里 0x1001 'b' 0x1002 'c' 0x1003 'd' 0x1004 '\0'
*ss
取0x1000
处的值'a'
ss
从0x1000
开始输出直到'\0'
。
注意:现代C++应使用const char*
声明字符串指针,避免修改字符串常量导致未定义行为。