5 陣列和字串

2021-10-18 19:35:59 字數 4424 閱讀 1146

陣列就是在記憶體中連續的相同型別的變數空間

同乙個陣列所有的成員都是相同的資料型別,同時所有的成員在記憶體中的位址是連續的。

乙個陣列可以分解為多個陣列元素:這些陣列元素可以是基本資料型別或構造型別。

按陣列元素型別的不同,陣列可分為:數值陣列、字元陣列、指標陣列、結構陣列等類別。

通常情況下,陣列元素下標的個數也稱為維數,根據維數的不同,可將陣列分為一維陣列、二維陣列、三維陣列、四維陣列等。通常情況下,我們將二維及以上的陣列稱為多維陣列。

int a[3]表示陣列a有3個元素

其下標從0開始計算,因此3個元素分別為a[0],a[1],a[2]

定義陣列時內最好是常量,使用陣列時內即可是常量,也可以是變數

初始化

int a[10]

=;//定義乙個陣列,同時初始化所有成員變數

int a[10]

=;//初始化前三個成員,後面所有元素都設定為0

int a[10]

=;//所有的成員都設定為0

//中不定義元素個數,定義時必須初始化

int a=

;//定義了乙個陣列,有5個成員

陣列名是乙個位址的常量,代表陣列中首元素的位址。

#include

int*main*()

;//定義乙個陣列,同時初始化所有成員變數

*printf*

("a = %p\\n"

, a)

;*printf*

("&a[0] = %p\\n"

,&a[0]

);int n =

sizeof

(a);

//陣列占用記憶體的大小,10個int型別,10 \* 4 = 40

int n0 =

sizeof

(a[0])

;//陣列第0個元素占用記憶體大小,第0個元素為int,4

int i =0;

for(i =

0; i \<

sizeof

(a)/

sizeof

(a[0])

; i++

)*printf*

("\\n");

return0;

}

二維陣列定義的一般形式是:

型別說明符 陣列名[常量表示式1] [常量表示式2]

初始化

//分段賦值

int a[3]

[4]=

,,};

//連續賦值

int a[3]

[4]=

;//可以只給部分元素賦初值,未初始化則為0

int a[3]

[4]=

;//所有的成員都設定為0

int a[3]

[4]=

;//中不定義元素個數,定義時必須初始化

int a[

4]=;

二維陣列是本質上還是一維陣列,此一維陣列有3個元素

區別

#include \

int*main*()

;//普通字元陣列

*printf*

("c1 = %s\\n"

, c1)

;//亂碼,因為沒有』\\0』結束符

//以『\\0』(『\\0』就是數字0)結尾的字元陣列是字串

char c2=

;*printf*

("c2 = %s\\n"

, c2)

;//字串處理以『\\0』(數字0)作為結束符,後面的'h', 'l', 'l', 'e', 'o'不會輸出

char c3=

;*printf*

("c3 = %s\\n"

, c3)

;return0;

}

字串的初始化

#include

// c語言沒有字串型別,通過字元陣列模擬

// c語言字串,以字元『\\0』, 數字0

int*main*()

;*printf*

("buf = %s\n"

, buf)

;//亂碼

//指定長度,後面沒有賦值的元素,自動補0

char buf2[

100]=;

char buf[

1000]=

;*printf*

("buf2 = %s\n"

, buf2)

;//所有元素賦值為0

char buf3[

100]=;

//char buf4[2] = ;//陣列越界

char buf5[50]

=;*printf*

("buf5 = %s\n"

, buf5)

;char buf6[50]

=;*printf*

("buf6 = %s\n"

, buf6)

;char buf7[50]

=;*printf*

("buf7 = %s\n"

, buf7)

;//使用字串初始化,編譯器自動在後面補0,常用

char buf8=

"agjdslgjlsdjg"

;//'\0'後面最好不要連著數字,有可能幾個數字連起來剛好是乙個轉義字元

//'\ddd'八進位制字義字元,'\xdd'十六進製制轉移字元

// \012相當於\n

char str=

"\012abc"

;*printf*

("str == %s\n"

, str)

;return0;

}

字串的輸入輸出

由於字串採用了』\0』標誌,字串的輸入輸出將變得簡單方便。

#include \int *main*()

gets()

char *gets(char *s);

功能:從標準輸入讀入字元,並儲存到s指定的記憶體空間,直到出現換行符或讀到檔案結尾為止。

返回值:

gets(str)與scanf(「%s」,str)的區別:

fgets()

char *fgets(char *s, int size, file *stream);

功能:從stream指定的檔案內讀入字元,儲存到s所指定的記憶體空間,直到出現換行字元、讀到檔案結尾或是已讀了size

引數:s:字串

size:指定最大讀取字串的長度(size - 1)

stream:檔案指標,如果讀鍵盤輸入的字串,固定寫為stdin

返回值:

成功:成功讀取的字串

讀到檔案尾或出錯: null

fgets()在讀取乙個使用者通過鍵盤輸入的字串的時候,同時把使用者輸入的回車也做為字串的一部分。通過scanf和gets輸入乙個字串的時候,不包含結尾的「\n」,但通過fgets結尾多了「\n」。fgets()函式是安全的,不存在緩衝區溢位的問題。

puts()

int puts(const char *s);

功能:標準裝置輸出s字串,在輸出完成後自動輸出乙個』\n』。

引數:返回值:

成功:非負數

失敗:-1

fputs()

int fputs(const char * str, file * stream);

功能:將str所指定的字串寫入到stream指定的檔案中, 字串結束符 『\0』

不寫入檔案。

引數:str:字串

stream:檔案指標,如果把字串輸出到螢幕,固定寫為stdout

返回值:

成功:0

失敗:-1

fputs()是puts()的檔案操作版本,但fputs()不會自動輸出乙個』\n』。

printf(「hello world」);

puts(「hello world」);

fputs(「hello world」, stdout);

strlen()

size_t strlen(const char *s);

功能:計算指定指定字串s的長度,不包含字串結束符『\0』

引數:返回值:字串s的長度,size_t為unsigned int型別

函式的形參和實參

函式定義和宣告的區別:

字串和字串陣列

字串陣列 include int main int argc,const char ar printf name1 s n name1 name1 zhangsan 部分初始化中,沒有被初始化的元素預設是0,0 對應的ascii值是 0 char name2 9 printf name2 s n n...

C基礎5 陣列和字串

0.陣列型別 是 由多個元素的組合。這多個元素的資料型別必須完全一樣。1.陣列是乙個構造型別,也是最基礎的構造型別了。2.陣列的個數如下 char a 5 char 是所有元素的資料型別。全部都是char a是陣列名,a是常量 但是不能執行a a a a 5 陣列有五個成員,分別是 a 0 a 1 ...

字串和字串陣列和 0

c語言中字串為什麼要有 0呢?0在字串中的作用是什麼 0 在字串中標誌著結尾 用來判斷這個字串已經結束 如果不新增 0 系統就在記憶體中一直向後讀,直到讀到 0 為止 這個情況就造成錯誤 乙個語句結束了,就用分號 表示結束 首先要區分,字元,字元陣列,字串的區別。字串預設的最後會有 0 char k...