1. 程式人生 > >C/C++中關於字串陣列與字串常量

C/C++中關於字串陣列與字串常量

今天遇到了好多問題,從記憶體到字串。。。上網查了些資料,現在就字串陣列和字串常量來做個總結吧。
其實也就是char  sz[] = "string"; 和char *psz = "string";  這兩種字串的賦值之間的區別。

首先來說說char  sz[] = "string";  這條語句,該語句是按照陣列的形式來一個個存放的,編譯器將其解釋為
char   sz[] = {'s','t','r','i','n','g','/0'}; 如果在函式內部出現的話,這幾個字元將存放在堆疊中,所以不是字串常量。

再來說說char *psz = "string"; 這條語句,該語句定義了一個指向"string"字串的指標,並沒有空間存放"string"字串,顯然把“string”當做字串常量並存放在常量區是最合適的選擇。並且語句 psz[4] = 'x'; 在編譯時不會報錯,執行時會產生異常,原因是“string”存放在只讀儲存區,不可以修改。這和C++中 const char *psz = "string";一句是一樣的,所以最好顯示的加上const關鍵字從而讓編譯器檢測出“修改常量“錯誤。

以前一直不能理解的一個問題:函式中行參為陣列時應怎麼看待?
如:void  foo(char sz[100], int ival[10]);
答案是將其理解為指標的形式:
        void  foo(char *sz, int *ival);