人们通常会将“不可修改”与字面量相关联
char* str = "Hello World!";
*str = 'B'; // Bus Error!
然而,当使用复合文字时,我很快发现它们是完全可修改的(查看生成的机器代码,您会看到它们被推入堆栈):
char* str = (char[]){"Hello World"};
*str = 'B'; // A-Okay!
我正在用clang-703.0.29
. 这两个示例不应该生成完全相同的机器代码吗?如果复合文字是可修改的,它真的是文字吗?
编辑:一个更短的例子是:
"Hello World"[0] = 'B'; // Bus Error!
(char[]){"Hello World"}[0] = 'B'; // Okay!