由雙引號括起來的字符串常量屬於靜態存儲類型,它被存儲在內存的靜態存儲區內,所以無論字符串常量出現在程序的什麼地方,它在程序的整個運行過程中只存儲一份。
如果用字符串常量初始化字符數組,就是從靜態存儲區把整個字符串復制給數組。例如:
char a[] = "hello";
如果用字符串常量初始化字符指針,就是把字符串在靜態存儲區的地址復制給指針。例如:
char *p = "world";
這兩種形式的一個重要區別是不能通過指針來修改字符串的值,但是字符數組不存在這個問題,如下語句是錯誤的:
p[0] = 'p';
而如下語句沒有問題:
為了避免通過指針修改字符串的錯誤,建議將字符指針聲明為const類型,如下所示:
const char *p = "world";