1. 程式人生 > >程式設計C語言第八章知識總結

程式設計C語言第八章知識總結

這一章講的主要是陣列,在程式設計中,陣列可以用來儲存一大堆相同的資料,不僅簡化了問題,還縮短了程式碼長度。
一維陣列:如int a[10];
一維陣列在記憶體中佔用的位元組數為:陣列長度和sizeof(基本型別)的乘積,因為在不同的一編譯系統中int所佔的位元組數是不一樣的,所以還是用sizeof保險。
C語言中陣列的下標是從0開始的,a[10]的陣列下標是0到9,而不是1到10。在定義陣列時不能使用變數定義陣列的大小,即使變數在前面已經被賦值,但是不代表陣列的下標不能是字母,字母在前面可以被定義為一個數,陣列的定義最好用巨集定義,以適用未知的變化。陣列的下標可以是常量,也可以是整型表示式,以實現快速訪問,如a[i]、a[i++]。
一維陣列的初始化

可以在定義時一併完成。如a[5]={1,2,3,4,5},而a[5] = {1,2,3}是隻對陣列的的前三個數進行初始化,其餘值是0,a[5]={}是將陣列全部初始化為0,陣列有一種全部清零的方式:memset(a,0,sizeof(a)),頭函式是string.h。
對於陣列定義的位置,在主函式裡面定義陣列和在主函式外面定義陣列是有區別的。在主函式裡面定義的陣列如果不進行初始化,輸出的都是些機器垃圾值。在主函式外面定義的陣列屬於全域性變數,初始值全是零。
在主函式裡面定義陣列和在主函式外面定義陣列還有一個區別。在主函式外面定義陣列,陣列可以開的很大。如果在裡面,陣列稍微大一點,程式就會停止執行。
綜上所述,陣列最好在外面定義。
陣列不能直接進行賦值
操作,因為陣列名是陣列的首地址,不可以改變。如果要從陣列a中複製k個元素到另一個數組b,就要用到memcpy(b,a,sizeof(型別)*k),全部複製,直接memcpy(b,a,sizeof(a)),此函是需要呼叫標頭檔案string.h。
如果要實現兩個陣列的值相等,還有兩種方法,一是逐個元素賦值,再一個是通過迴圈對陣列進行賦值。

二維陣列:如int a[5][5];
可以看成一個矩陣。
二維陣列在記憶體中佔用的位元組數為:第一維長度和第二維長度和sizeof(基本型別)的乘積。二維陣列的長度宣告永遠不能省略。
字元陣列:字元陣列是指元素為字元的數字符數,用來存放的是字串和字元序列,有一維二維之分。
字串是一維陣列,陣列中存字元和存字串的區別是是否有’\0’。字串陣列是二維陣列。
輸入字串可以用scanf和gets,scanf輸入字串,讀到空格終止一次讀入,如scanf("%s",s1)輸入hello world,讀入的只有hello,想要全部輸入可以scanf("%s %s",s1,s2),如果用gets的話就沒那麼多事了。輸出可以用printf和puts。
排序

可以用swap和sort函式。
陣列越界是萬萬不可存在的,如果下標越界,訪問的將是未知的資料,所以在寫程式時最好對無效資料進行管理。