字元,字元陣列,字元指標

2021-06-20 17:41:28 字數 761 閱讀 3917

一、字串變數與常量

例: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 因為定義的是乙個字元陣列,所以就相當於定義了一些...