#include<iostream> ios
using namespace std; 數組
int main() { 工具
char *p1 = "abcd"; spa
char p2[] = "1234"; 指針
return 0;內存
}字符串
這兩者的區別還在於:
1. p1是一個指針變量,有一塊內存存儲它,它的內容是字符串的地址,那麼咱們要訪問字符串就先要取出p1中存儲的地址,而後計算偏移量,進行訪問
2. 不一樣於p1,p2直接是字符串的地址,可直接訪問編譯器
「abcd」在常量區分配了內存存儲,棧上分配一地址給p1並指向「abcd」,那麼若是在後面的代碼中改變了「abcd」,天然崩潰。因此,須要加上const限定。io
可是說到底,爲何改變p1就是危險的,字符數組的內容就能隨意改變呢?這是由於「abcd」是在編譯時刻就肯定的,而「1234」是在運行時刻賦值的。因此,編譯器在編譯時就已經知道p1指向的是常量,他並不但願你改變,可是數組不一樣,能夠說他只是個存儲的工具,編譯器編譯時並不知道它裏面是什麼。編譯
但在日後的存取中,在棧上的數組比指針所指向的字符串是要快的。