c語言中的兩種字串1.兩種字串的表示
1.字串陣列
char str1=
"hello"
;char str2[6]
="hello"
;
注意:在字串(陣列)初始化時sizeof(str)的大小應該比你想要的大小+1,因為在作為字串時,會有乙個『\0』自動成為字串的元素;上述的例子如果變成:
char str2[5]
="hello"
;
執行後,程式會報錯。
但值得一提的是,若像下面這樣初始化陣列:
char str2[5]
=;
這表示字元陣列的初始化,並不會出現錯誤。
2. char*
如果我現在,像這樣定義乙個指標p
char
* p;
你會想到什麼呢?
指標代表乙個位址,所以p是乙個指向某位址的指標,但是,實際上,我可以進行以下操作
char
* p=
"hello"
;
???
這是什麼鬼?
實際上,這牽扯到乙個問題,在c語言中字串到底是什麼?先說答案:在c語言中,字串其實就是乙個位址。
c語言中,編譯器會給字串分配位址,假設剛才的hello在記憶體中分配給了一塊連續空間中,我們用0x2001,0x2002…0x2006代表它的位址。那麼上述的意思是:s應該等於某位址,而你讓s=「hello」,編譯器沒報錯,說明編譯器將其看做了位址———也就是我們所講的字串的本質,其實是代表它第乙個字元的位址。(在這裡是0x001)
同理,這也是為什麼陣列可以當作指標用,陣列指向的仍然是它的第乙個字元的位址。
3.兩者的區別
另外值得一提的是,指標定義的字串,可以作為陣列用,例如:
#include
intmain()
輸出結果為:a或者,皮一下我們換種型別
#include
#include
int i,
*p;p=
(int*)
mallloc(10
*sizeof
(int))
;for
(i=0
;i<
10;i++
) p[i]
=i;for
(i=0
;i<
10;i++
)printf
("%d"
,p[i]);
free
(p);
C語言中字串的兩種定義方式詳解
目錄 前兩種是正確的定義方式,第一種之所以沒有指定字元陣列長度的原因是編譯器能夠自己推斷出其長度,無需程式設計師自己設定,這也是我們比較推薦的一種定義方式,但注意記憶體長度編譯器一經判定就無法再次更改,接下來我們分析一下第三種編譯器為什麼會出現亂碼。相信大家都知道,字串是以 0 字元為結束標誌的,這...
字串的兩種逆序輸出
一 比如輸入 abcd 輸出 dcba include stdio.h include stdlib.h include string.h include char reverse char s p while r p return s int main 二 單詞逆序,比如輸入 you love i...
json 字串型別兩種轉換
1.第一種json格式轉換 需要匯入jar包 json lib 2.4 jdk15.jar ezmorph 1.0.4.jar commons logging 1.1.1.jar commons lang 2.4.jar commons collections 3.2.1.jar commons b...