字元陣列與字元指標的區別以及字串常量的修改

2021-06-03 20:46:07 字數 1083 閱讀 2034

字元陣列 char  string[20]=「hello zhao!」      字元指標char  *str="hello zhao!"  (把字串常量的首位址賦給了這個字元指標str)區別 : 字元陣列是在記憶體中開了一段空間用來存放  "hello zhao!」如下所示:  he

lloz

hao!

\0          string是陣列名,其實乙個常量(或標號),其不占用記憶體空間,所以只開了一段空間,就是這個字串占得空間。string其值就是這個字元陣列的第乙個元素的位址。相當於乙個標號,它不能

被賦值,也

不能參與自增自減運算。

而字元指標是個變數,其可以被賦值,  char  *str="hello zhao!"  在記憶體中定義是開了兩段空間的,一是因為string是個變數,所以其本身也占用乙個位元組的記憶體,而這乙個位元組中存放的是字串常量"hello zhao!"的位址;二是另一段是字串常量"hello zhao!"所佔了一段空間。如下所示

string這個變數其值位字元常量首位址

............he

lloz

hao!

\0 注意:a、string="hello zhao!";是不行的,string陣列名不能被賦值。

b、char  *str="hello zhao!"  這種字元指標指向的是字元常量,"hello zhao!"是 字元常量,是不可改變的,所以不能通過字元指標修改這個字串的內容。

c、char *a, str[10];   a = str;這樣子 當字元指標指向乙個字元陣列的時候,可以通過字元指標修改str[10]中的變數

d、字元陣列在定義和編譯時系統會自動分配記憶體單元,而字元指標變數定義後最好將其初始化,否則字元指標變數的值會指向乙個不確定的記憶體段,將會破壞程式。

如:char *a;

scanf( "%s", a );這種方法是很危險的,應該這樣:

char *a, str[10];

a = str;

scanf( "%s", a );這樣字元指標就指向了乙個確定的記憶體段

e、字元指標的兩種初始化方法如上藍色標出了。

陣列與指標的區別 字元陣列與字元指標的區別

這裡介紹字元陣列與字元指標的區別 下面通過乙個例子進行介紹 char message1 hello char message2 hello 上面兩個 message 的變數看起來好像是一樣的,但實際他們的意義是不一樣的,前者代表的是字元陣列的初始化,後者則是乙個字元指標指向乙個字串常量 為了驗證上面...

指標與陣列 字元指標,字串和字元陣列的區別

指標和陣列是不相等的,把乙個陣列名作為乙個引數傳遞給函式時陣列名就是指向第乙個元素的指標,在大多數表示式中 陣列名的值是指向第乙個元素的指標 有兩個例外,乙個是sizeof返回的是整個陣列 的位元組數,乙個是 操作符返回 的是乙個指向陣列的指標 但不代表 兩者等價。int a 3 int b 宣告乙...

字串擷取以及字元陣列和字元指標的區別

今天早晨在研究字串擷取時,查閱了很多資料。結果自己吧自己搞糊塗了。網上一些結論不一定都是正確的。我在這裡寫出一些我自己的感悟,如果有不對的地方,真的真的希望大家趕緊幫我指正出來,萬分感謝!回到正題,首先先說一下字串擷取,畢竟萬事都有個頭兒嘛,鹽打哪鹹,醋打哪酸。糾結一早晨,還是因為字串擷取引發的血案...