指標和字串之間的聯絡

2021-09-29 04:19:31 字數 2161 閱讀 8657

紅塵**網 wap.zuxs.net

c語言中沒有string基本資料型別

c語言裡有這個標頭檔案,所以就想當然的認為c語言裡有string這個型別,通過下面這種形式來宣告string的變數string astring;編譯失敗。原來c語言裡壓根就沒有string這個型別,所以字串都是通過char陣列來儲存的, 而這個標頭檔案裡宣告的函式原型也全是針對char陣列的種種操作。直到c++中才出現了string這個類(注意是類, 不是型別)。

字串通過字元陣列來定義時,缺省會在陣列最後乙個元素加上'\0'作為結束標誌

鑑於第二點,如果要區分普通的字元陣列和字串,參考如下**

//此string1後面不會有'\0'標誌,就是一般的字元陣列

char string1[3]=;

//string2為字串形式,結尾有\0標誌,長度為4

char string2[4]="abc"

注意:這裡的string2的長度可以不限定,預設省略,交給編譯器自動設定長度,如果需要人為設定長度,則需要考慮到'\0'字元

如果字元陣列長度不夠,則編譯器報錯

d:\otherworkspace\devcppworkspace\ds\ds-c2\demo5.cpp [error] initializer-string for array of chars is too long [-fpermissive]

陣列名字和指標的關係

示例**如下:

#includeint main()

return 0;

}

列印結果

000000000062fe10        000000000062fe10        a

000000000062fe11 000000000062fe11 b

000000000062fe12 000000000062fe12 c

000000000062fe13 000000000062fe13

根據**的執行結果來看,string【也就是陣列名字】其實就是乙個指標,它指向了第1個元素【下標為0】,我們可以直接對指標進行算數運算,它會自動的根據指標型別移動相應的長度,比如說這裡的指標就是字元型,佔乙個位元組,那麼string++,就會自動把指標往後移動乙個位元組。

#include int main()

執行結果:

enter name: dennis ritchie

your name is dennis.

scanf()函式讀取字串行,當遇到空格(space,newline,tab etc.)時停止讀取。

那麼如何讀取行呢?

#include int main()

輸出

enter name: tom hanks

name: tom hanks

在這裡,我們使用了fgets()函式從終端讀取字串。 fgets(name,sizeof(name),stdin); sizeof(name)的結果為30。因此,我們最多可以輸入30個字元作為輸入,即name字串的大小,也可以指定為其它的長度。 為了列印字串,我們使用了puts(name),你也可以直接使用printf()函式列印。

注意:gets()函式也可以接受使用者的輸入。但是,它已從c標準中刪除。 這是因為gets()允許輸入任意長度的字元。因此,可能存在緩衝區溢位。

示例**

//求字串長度 

#include #include int main(void)

output

without null character: 45

with null character: 46

指標和字串之間的聯絡

c語言中沒有string基本資料型別 c語言裡有這個標頭檔案,所以就想當然的認為c語言裡有string這個型別,通過下面這種形式來宣告string的變數string astring 編譯失敗。原來c語言裡壓根就沒有string這個型別,所以字串都是通過char陣列來儲存的,而這個標頭檔案裡宣告的函式...

C 陣列 字串 指標之間聯絡詳解

1 定義 儲存多個同型別的值。int a 5 是int陣列,而不是陣列 5 整型常數 const值 變數 常量表示式 const int n 5 char a n cout a 2 初始化 定義陣列時,才能初始化。兩種方式 列表 對於字串可以不用 下標賦值 列表 int a 10 字元 char a...

指標 陣列 字串 結構體之間的聯絡

1 指標操作變數 int p 定義乙個整形指標 p代表的是位址,p代表的是位址指向的值 int a 10 p a 將a的位址賦值給p指標 pa 20 通過指標改變變數a的值 a 20 也可以通過變數改變 p的值 2 指標運算元組 int i,b 30,a 0 i int p a 陣列名代表陣列的首位...