字串陣列和字串指標的區別

2021-06-06 22:59:11 字數 990 閱讀 1324

在最早學c語言的時候,char *與char 是最讓我頭疼的幾個問題之一。

字串陣列和字串指標是截然不同的兩個東西,如果不去在意它們之間的不同,而混合使用,可能會帶來很多麻煩。讓我們從這兩個東西建立的過程說起。

當我們進行字串陣列的定義時

char str = "

abc";

其實我們做了兩件事:

1. 建立了乙個新的字串。

2. 建立了乙個名叫「str」的變數儲存字串的首位址。

而當我們進行字串指標的定義時

char* str = "

abc";

我們只是定義了乙個指標指向字串「abc」的首位址。

等等,難道我們不需要建立字串"abc"嗎?

在c語言中,當程式開始執行時,程式會將所有用到的literal string(不知道中文怎麼說)自動載入進記憶體中,所以字串指標實際指向的是在程式開始執行時就已經在記憶體中建立的「abc」的首位址。

我們來做乙個實驗

#include  int main(int argc, char *argv)

在我的pc中,該程式的執行結果是

0x80485d0

0x80485d0

0xbfc2df64

可以發現字串指標s1,s2實際指向了同乙個位址。

我們常說literal string是不能更改的。當我用char *ss = "abc"定義了一字串指標,如果在程式中試圖更新ss,程式就會出錯,這是因為literal string是存放在constant記憶體區,是不能被更改的。如果我們建立的字串有可能被更改,那麼需要先對literal string做乙份拷貝,再將指標指向這個拷貝的首位址。即使用字串陣列的定義方式:char ss = "abc";

乙個好的程式設計習慣是當我們使用字串指標的定義時使用const限定符: const char* ss = "abc"; 這樣如果程式試圖更改這個變數,在編譯時就會給出錯誤。

字串指標和字串陣列的區別

char p1 a string.和 char p2 another string.寫法的不同 p1指向的這個字串是個常量,不可改變 程式在編譯期間就為 a string.這個字串分配了固定的空間,它被儲存在全域性靜態區中.編譯器只是把指標p1的指向的位址賦為 a string.的首位址,並沒有為指...

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...

字串陣列和字串指標的使用和區別

字串陣列 include include int main 這段 能夠正常編譯和鏈結,但在執行時會出現段錯誤 segment fault 或者寫入位置錯誤。第4行 是正確的,可以更改指標變數本身的指向 第5行 是錯誤的,不能修改字串中的字元。在程式設計過程中如果只涉及到對字串的讀取,那麼字元陣列和字...