陣列就是在記憶體中連續的相同型別的變數空間同乙個陣列所有的成員都是相同的資料型別,同時所有的成員在記憶體中的位址是連續的。
乙個陣列可以分解為多個陣列元素:這些陣列元素可以是基本資料型別或構造型別。
按陣列元素型別的不同,陣列可分為:數值陣列、字元陣列、指標陣列、結構陣列等類別。
通常情況下,陣列元素下標的個數也稱為維數,根據維數的不同,可將陣列分為一維陣列、二維陣列、三維陣列、四維陣列等。通常情況下,我們將二維及以上的陣列稱為多維陣列。
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...