更多的是一般性问题,而不是试图解决某些问题,我一直在阅读 C 编程语言书,他们注意区分
char amessage[] = "blah";
char *pmessage = "blah";
不同之处在于一个是 char 数组,另一个是指向字符串常量的指针。他们说修改 char 数组是可以接受的,但你不应该修改字符串常量,因为它会触发未定义的行为。我的问题是:存储在内存中的字符串常量与 char 数组的存储方式不同吗?为什么我可以修改它
char *p = "this is a string constant";
*(p+2) = 'a';
printf("%s", p);
如您所料,最终打印“这是一个字符串常量”。我可以理解它是如何有意义的,因为字符串常量不应最终在运行时被更改,因为它可能会使其他人/您自己在处理您的代码时感到困惑,而不是期望它的价值会改变,但在纯粹的功能方面它有什么问题,可能触发的未定义行为是什么?当 char 数组不会触发时,它会如何机械地适得其反?我只是想知道我是否遗漏了有关字符串常量在内存中的工作方式以及编译器如何看待它们的信息。