C 中char 和char 的區別

2021-08-11 21:01:22 字數 780 閱讀 2442

以前一直覺得這兩個有區別,但也沒深究,今天寫了個**報了警告於是就看了看,總結如下。

例如如下**:

#include

using

namespace

std;

int main()

這二者的區別還在於:

1.p1是乙個指標變數,有一塊記憶體儲存它,它的內容是字串的位址,那麼我們要訪問字串就先要取出p1中儲存的位址,然後計算偏移量,進行訪問

2.不同於p1,p2直接是字串的位址,直接訪問就行了

「abcd」是文字常量區分配了記憶體儲存的,棧上分配一位址給p1並指向「abcd」,那麼如果在後面的**中改變了「abcd」,自然崩潰。所以,需要加上const限定

但是說到底,為什麼改變p1就是危險的,字元陣列的內容就能隨意改變呢?這是因為「abcd」是在編譯時刻就確定的,而「1234」是在執行時刻賦值的。所以,編譯器在編譯時就已經知道p1指向的是常量,他並不希望你改變,但是陣列不同,可以說他只是個儲存的工具,編譯器編譯時並不知道它裡面是什麼。

但在往後的訪問中,在棧上的陣列比指標所指向的字串是要快的。

還網上找到如下**,很詳細

int a=0;    //全域性初始化區

char *p1; //全域性未初始化區

main()

c 中char 和 char 的區別

問題引入 在實習過程中發現了乙個以前一直預設的錯誤,同樣char c abc 和char c abc 前者改變其內 容程式是會崩潰的,而後者完全正確。程式演示 測試環境devc include using namespace std main 執行結果 2293628 4199056 abc 229...

c 中char 和 char 的區別

問題引入 在實習過程中發現了乙個以前一直預設的錯誤,同樣char c abc 和char c abc 前者改變其內 容程式是會崩潰的,而後者完全正確。程式演示 測試環境devc include using namespace std main 執行結果 2293628 4199056 abc 229...

c 中char 和 char 的區別

問題引入 在實習過程中發現了乙個以前一直預設的錯誤,同樣char c abc 和char c abc 前者改變其內 容程式是會崩潰的,而後者完全正確。程式演示 測試環境devc include using namespace std main 執行結果 2293628 4199056 abc 229...