首頁 > 軟體

C語言中的字串資料在C中的儲存方式

2022-07-13 14:00:03

記憶體中的五大區域

棧:是專門用來儲存區域性變數的,所有的區域性變數都是宣告在棧區域中

堆:允許程式設計師手動的從堆申請指定位元組數的空間來使用

BSS段:是用來儲存未初始化的全域性變數和靜態變數,宣告一個全域性變數,如果我們沒有初始化,在程式執行最開始的時候,這個全域性變數是沒有初始化的,儲存在BSS段【程式執行後系統就自動的初始化為0,並把初始化後的全域性變數儲存在資料段中】

資料段/常數區:用來儲存已經初始化的全域性變數、靜態變數和常數資料

程式碼段:用來儲存程式的程式碼/指令

字串資料在C語言中有兩種儲存方式

1.使用字元陣列來儲存:將字串資料的每一個字元儲存到字元陣列中,並追加一個’’代表儲存結束

char name[]=「jack」;

2.使用字元指標來儲存字串資料:直接將一個字串資料初始化給一個字元指標

char* name =「jack」;

1)當它們都是區域性變數的時候

字元陣列是申請在棧區,字串的每一個字元儲存在這個字元陣列的每一個元素中;

指標變數是宣告在棧區的,字串資料是以字元陣列的形式儲存在常數區的,指標變數中儲存的是字串在常數區的地址

2)當它們作為全域性變數的時候

字元陣列是儲存在常數區的,字串的每一個字元儲存在這個字元陣列的每一個元素中;

指標變數也是儲存在常數區的,字串資料是以字元陣列的形式儲存在常數區的,指標變數中儲存的是字串在常數區的地址

3)

以字元陣列的形式儲存字串資料,不管是全域性的還是區域性的,都可以使用下標去修改字元陣列中的每一個元素;

以字元指標的形式儲存字串資料,不管是全域性的還是區域性的,都不能通過指標去修改指向的字串資料

當我們以字元指標的形式要將字串資料儲存到常數區的時候,並不是直接將字串儲存到常數區,而是先檢查常數區中是否有相同內容的字串,如果有直接將這個字串的地址拿過來返回,如果沒有,才會將這個字串資料儲存在常數區中

當我們重新為字元指標初始化一個字串的時候,並不是修改原來的字串,而是重新的建立了一個字串,把這個新的字串的地址賦值給它

幾個比較容易混的點

1.這樣是可以的,但是不是把“jack”改成了“rose”,而是重新建立了一個“rose”,把“rose”的地址賦值給name

char *name = "jack";name = "rose";

2.這樣是不行的,name是陣列名,代表陣列的地址,不能為陣列名賦值

char name[]="jack";name = "rose";

3.這樣做是可以的,直接修改陣列的元素

name[0]='r';name[1]='o';name[2]='s';name[3]='e';name[4]='';

統計字串中某一個字元出現的次數

使用字元指標陣列來儲存多個字串資料

這是一個一維陣列,每一個元素的型別是char指標:

char* names[4] = {"jack","rose","lily","lilei"};

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com