一、字串變數與常量
例:char a="abcdefg";
這一段語句中,既有字串變數,也有字串常量。
變數是陣列a,常量是**中的字面量字串(abcdefg)。
此時,可以訪問或修改a中任意乙個元素;
但是,常量字串只能訪問,不能修改。(這句留著下面有用)
二、字元指標與字串常量
例:char *p="abcdefg";
這個語句中,出現字串常量,與乙個指標變數。
注意,此時雖可以p【i】的方式訪問字元,但卻與上例有本質不同
此時,字串作為常量存在於程式的靜態儲存區中,只能訪問,不能修改
而p作為變數,位於程式的資料棧中,可以訪問和修改。
但是!!!p此時指向的位置是靜態儲存區中的常量,因此不能使用p【i】='a'的方式改變字串的值
三、字元指標與字串變數
例:char a[max]; char*p=a;
這個就比較容易理解了字元指標指向乙個字元陣列,陣列中存放的是變數。
因此可以訪問和修改
四、字元指標和字元常量
這個其實沒什麼好說的,但是很好玩
p指標的賦值,一般都是p=&ch;
但是如果寫出這樣的**p='a';
一般編譯器是不會報錯的,雖然會有乙個警告。
這是因為c語言是一種很沒有節操的而且會自動轉換型別的語言。
當執行**p='a'時,其實是將乙個位址(0x61)賦值給了p,編譯是能通過,但是賦值後如果再去訪問p,很可能會出現越界錯誤。
字元陣列VS字元指標
1.以字串形式出現的,編譯器都會為該字串自動新增乙個 0作為結束符,如在 中寫 abc 那麼編譯器幫你儲存的是 abc 0 2.abc 是常量嗎?答案是有時是,有時不是。不是常量的情況 abc 作為字元陣列初始值的時候就不是,如 char str abc 因為定義的是乙個字元陣列,所以就相當於定義了...
字元陣列VS字元指標
1.以字串形式出現的,編譯器都會為該字串自動新增乙個 0作為結束符,如在 中寫 abc 那麼編譯器幫你儲存的是 abc 0 2.abc 是常量嗎?答案是有時是,有時不是。不是常量的情況 abc 作為字元陣列初始值的時候就不是,如 char str abc 因為定義的是乙個字元陣列,所以就相當於定義了...
字元陣列VS字元指標
1.以字串形式出現的,編譯器都會為該字串自動新增乙個0作為結束符,如在 中寫 abc 那麼編譯器幫你儲存的是 abc 0 2.abc 是常量嗎?答案是有時是,有時不是。不是常量的情況 abc 作為字元陣列初始值的時候就不是,如char str abc 因為定義的是乙個字元陣列,所以就相當於定義了一些...