C++内存管理的奇怪之处

qtu*_*tug 5 c++ memory-management

考虑一下这段代码的输出:

char A = 'a';
char B[] = "b";
cout<<&A;
Run Code Online (Sandbox Code Playgroud)

它输出"AB"(的串联AB),我不知道为什么.请解释一下这个.

Sam*_*hik 15

因为&Achar *.由a表示的字符串char *需要具有'\0'终止字节.

&A指向单个char,没有跟随'\0'.因此,尝试打印此文本字符串会导致未定义的行为.


Tho*_*ser 0

这是依赖于编译器的行为。通常,A 和 B 将在堆栈上一个接一个地分配。获取 A 的地址将类似于以零结尾的字符串“ab”。不要这样做!您依赖于编译器正在构造的堆栈帧布局。