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