c++的char []和char *的區別


#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指向的是常量,他並不希望你改變,但是數組不同,可以說他只是個存儲的工具,編譯器編譯時並不知道它里面是什么。

但在往后的存取中,在棧上的數組比指針所指向的字符串是要快的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM