在C語言中有兩種使用字符串的方式,用char型指針、用char型數組。那他們有什麼區别和聯系呢,下面來一起來說說:
C語言表示字符串的兩種方式,如下:
首先,任何常量都将被放置到一個固定的内存區域,叫 .rodata 區,也叫常量區。因此上述代碼中的 "abcde" 和 "uvxyz" 都被放置在這裡面。
其次,s1 和 s2 都是普通變量,都被放置在棧内存中。
然後,s1 是一個指針,因此它的尺寸大小永遠都是四字節(32位系統),而 s2 是一個數組,尺寸大小根據具體的内容來決定。
它們變量在内存中的關系如下圖:
對于 s1 而言,僅僅保留了一個地址0x123,該地址就是常量區中字符串 "abcde" 的地址。
對于 s2 而言,則保留了從常量區複制過來了字符串本身的内容 "uvxyz" ,從上圖看到,此時 "uvxyz“ 實際上有兩個副本。
那麼在程序中如何使用這兩種方式呢?答案很簡單,如果僅僅是使用字符串,而不需要修改它,那就使用指針就行了,但是如果涉及需要對字符串内容的修改,那麼就需要使用數組。
上述代碼中,第一行試圖将 "ABCDE" 塞到常量區,顯然是不可行的。而第二行則試圖将 "UVXYZ" 塞入棧中的數組,這是可行的。
char型數組和char型指針是有本質上的區别的,大家千萬不要搞混。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!