以前一直覺得這兩個有區別,但也沒深究,今天寫了個**報了警告於是就看了看,總結如下。
例如如下**:
#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...