考虑:char amessage[] = \'now is the time\';char *pmessage = \'now is the time\';我从《C 编程语言》第 2 版中读到,上述两个语句并不执行相同的操作。我总是……
考虑:
char amessage[] = "now is the time";
char *pmessage = "now is the time";
我从 《C 编程语言 》第 2 版中了解到,上述两个语句的作用并不相同。
我一直认为数组是一种操作指针来存储某些数据的便捷方式,但显然事实并非如此......C 语言中数组和指针之间有哪些“非平凡”的区别?
数组包含元素。指针指向它们。
第一种是简短的说法
char amessage[16];
amessage[0] = 'n';
amessage[1] = 'o';
...
amessage[15] = '\0';
也就是说,它是一个包含所有字符的数组。特殊初始化会为您初始化它,并自动确定其大小。数组元素是可修改的 - 您可以覆盖其中的字符。
第二种形式是指针,它只指向字符。它不直接存储字符。由于数组是字符串文字,因此您无法获取指针并写入它指向的位置
char *pmessage = "now is the time";
*pmessage = 'p'; /* undefined behavior! */
此代码可能会在您的机器上崩溃。但它可能会做任何它想做的事情,因为它的行为是未定义的。