字串及字串陣列
字串:儲存在雙引號中,並且結尾是空字元\0的才算字串,空字元\0是編譯器自動加的,不需要人為加。
字串本身也表示一個地址,這個地址是字串首字元的地址,可以根據下面的程式來驗證:
//驗證字串本身的地址
列印結果:
print the adress of ptchar :0000000000404000 print the adress of the characters :0000000000404000 print the adress of names+1 :0000000000404001 print the adress of characters+1 :0000000000404001
*在printf()、puts()、fputs()函式中,只要知道字串的首字元的地址,就可以根據%s轉換說明打印出這個完整的字串。
另外:字串巨集代表的也是字串首字元的地址。
例如:
//利用地址在輸出函式中打印出完整的字串
列印結果如下:
print the characters :I love Rocky! print the characters :love print the characters :love print the characters :A handsome man! I love Rocky! love love A handsome man! I love Rocky!loveloveA handsome man!
二、字串常量(字串巨集)
使用#define宣告的字串,我們叫做字串常量。(也叫字串巨集)
三、指標宣告字串
什麼是指標宣告字串:就是用指標來宣告一個字串。
例如:char *ptchar="I love opening the door."就叫用指標宣告一個字串。
從本質上來理解為什麼使用指標來宣告字串:
首先:I love opening the door.是一個字串,計算機首先會為他尋找一個記憶體,儲存在程式中。
其次:這個指標ptchar儲存的是字串中首字元的地址,知道字串的首地址了,那麼我們就可以根據這個地址在記憶體中找到這個字串。這樣做相比於建立陣列而言,可以直接訪問原始資料的地址。
例如:
//測試2
列印內容如下:
列印陣列首元素的地址:0000000000404000 列印字串首字元的地址:0000000000404000
四、字串陣列(一維)
字串陣列和其他陣列一樣,只不過,字串陣列的初始化要用雙引號。
*重點內容:一維陣列的陣列名稱就是一個指標,這個指標儲存的內容是字串首字元的地址。
初始化的本質:例如: char names[20]="I love Rick very much."這個字串陣列
首先:計算機會給I love Rick very much.這個字串一個記憶體,這個字串儲存在了程式中。
建立了names[20]這個陣列,計算機會分給這個陣列一個記憶體,陣列中的20個元素也儲存在程式中。
其次:計算機再將這個字串複製一份,放入這個字串陣列中,沒有儲存字元的元素將被初始化為空字元\0。
如果對陣列初始化:那麼不必知道這個陣列的大小,計算機會按照字串的大小自動為陣列分配大小,如果字串中由n個字元,1個空字元,那麼陣列的大小就是n+1。
如果不對陣列進行初始化:那麼陣列必須要有大小。
//測試
列印結果如下:
hhhjhjhjuu hhhjhjhjuu 列印陣列首元素的地址:000000000062FDE0 列印字串首字元的地址:000000000040401A
五、字串陣列(二維)
二維字串陣列是由多個一維字串陣列組成的。
例如:char names[4] [20];
表示的是是由4個一維字串陣列組成的,每個一維字串陣列最大可以容納20個字元。
names是二維字串陣列的名稱,這是一個指向一維字串陣列的指標,儲存的是第一個一維字串的地址。
names[0]是一維字串的名稱,這是一個指向字元的指標,儲存的是第一個一維字串陣列中首字元的地址。