#include<iostream>
using namespace std;
int main() {
char *p1 = "abcd";
char p2[] = "1234";
return 0;
}
這二者的區別還在於:
1. p1是一個指針變量,有一塊內存存儲它,它的內容是字符串的地址,那么我們要訪問字符串就先要取出p1中存儲的地址,然后計算偏移量,進行訪問
2. 不同於p1,p2直接是字符串的地址,可直接訪問
“abcd”在常量區分配了內存存儲,棧上分配一地址給p1並指向“abcd”,那么如果在后面的代碼中改變了“abcd”,自然崩潰。所以,需要加上const限定。
但是說到底,為什么改變p1就是危險的,字符數組的內容就能隨意改變呢?這是因為“abcd”是在編譯時刻就確定的,而“1234”是在運行時刻賦值的。所以,編譯器在編譯時就已經知道p1指向的是常量,他並不希望你改變,但是數組不同,可以說他只是個存儲的工具,編譯器編譯時並不知道它里面是什么。
但在往后的存取中,在棧上的數組比指針所指向的字符串是要快的。