C 碎片五 陣列

2021-08-03 16:13:23 字數 3593 閱讀 3561

構造型別資料是有基本型別資料按照一定規則組成的。陣列,結構體,共用體都屬於構造型別的資料。陣列是有序資料的集合,c語言陣列中的每乙個元素都屬於同乙個資料型別,用陣列名和下標來唯一確定陣列中的元素。

使用場景:當我們需要儲存大量同型別資料的時候可以用陣列

一維陣列定義:具有相同資料型別變數的有序集合 (空間有序)

宣告陣列的格式: 型別  陣列名[常量表示式]

例: int scores[5] ;

表示:定義了乙個整型一維陣列,陣列名為scores,scores陣列有5個元素

說明:1. 陣列名的命名規則? 遵循識別符號命名規則

2. 陣列名是? socres

3. 陣列的元素型別是? int ,  去除陣列中的scores剩下的就是陣列元素的型別

4. 陣列的型別是? int , 去除陣列名剩下的就是陣列的型別

5. 陣列的元素個數? 5

6. 陣列的元素分別是? scores[0]、scores[1]、scores[2]、scores[3]、scores[4]

7. 陣列的訪問格式?陣列名[索引/下標]  索引範圍 <0 -- (元素個數-1)> 從零開始代表第乙個元素 依次類推

一維陣列初始化:

1. 上面陣列沒有初始值,預設是隨機值。

2. 使用陣列的時候一般要進行初始化,如果不知道陣列中要放什麼,那麼一般做清零處理。int scores[5] = {} ;

3. 陣列也可以部分初始化。int scores[5] = ; 那麼陣列中的前三個元素是1,2,3 後兩個元素預設為0

4. 一般定義的時候要給出元素個數,也可以 int scores = ; 資料的個數確定就不用指定元素個數

陣列越界:陣列訪問一定不要越界,越界後後果是不可**的,是危險的,不安全的

其他陣列:上面演示的是整型陣列,也可以是  char c[5] =  ; double , float 等

二維陣列定義

的格式: 型別  陣列名[常量表示式][常量表示式]

二維陣列的本質:二維陣列可以看成是特殊的以為陣列,它的元素又是乙個一維陣列

例: int scores[2][3] ;

表示:定義了乙個整型二維陣列,陣列名為scores,scores陣列有2個元素

說明:1. 陣列的元素個數? 2 , 緊挨著陣列名後的中的數字就是陣列元素個數

2. 陣列的元素型別是? int ,  去除陣列中的scores剩下的就是陣列元素的型別

3. 陣列的型別是? int , 去除陣列名剩下的就是陣列的型別

4. 陣列的元素分別是? scores[0][0]、scores[0][1]、scores[0][2]、scores[1][0]、scores[1][1]、scores[1][2]

5. 陣列的訪問格式?陣列名[索引/下標][索引/下標] 

6. 一維陣列的所有性質,二維陣列都滿足

二維陣列初始化:

1. 上面陣列沒有初始值,預設是隨機值。

2. 使用陣列的時候一般要進行初始化,如果不知道陣列中要放什麼,那麼一般做清零處理。int scores[2][3] = ,} ;

3. 陣列正常初始化。int scores[2][3] = ,} ; 

4. 二維陣列的元素個數初始化的時候可以省去但是第二個中不能省去

區分四個零0,『0』,『\0』,「0」 (字元『\0』也即為空和數字0的ascii碼值是一樣的)「0」包含乙個字元0和『\0』

各種陣列初始化為空的方法:

//++++++++++++++++++++++++++++++++++++++++//

二維:char a[10][10]={}; char a[10][10]=; chara[10][10]=;

下面需要重點說明,指標陣列裡面存放的是位址(長整形8個位元組),所以初始化為空的時候列印的都是0

陣列元素的遍歷:一般要用迴圈對陣列進行遍歷

//for迴圈

int a[5] = ;

for (int i = 0; i < 5; i++)

//while迴圈

int a[5] = ;

int i = 0;

while (i<5)

1. 選擇排序法

int a[5] = ;

//按照 從小到大排序

選擇法:從第乙個元素開始 依次拿陣列中的每個元素a[i],跟它後面的每個元素進行比較 a[i] 和 a[j],把大的放後面(if  a[i]  > a[j]  —>a[i]和a[j]交換)

5  4  3  2  1

第一輪:始終拿a[0]跟後面的a[1]a[2]。。a[j]進行比較 ,把大的放後面(if a[0] > a[j]—>交換)

1  5  4  3  2

第二輪:始終拿a[1]跟後面的a[2]a[3]。。a[j]進行比較 ,把大的放後面(if a[1] > a[j]—>交換)

1  2  5  4   3

第三輪:始終拿a[2]跟後面的a[3]。。a[j]進行比較 ,把大的放後面(if a[2] > a[j]—>交換)

1  2  3  5   4

第四輪:始終拿a[3]跟後面的a[4]。。a[j]進行比較 ,把大的放後面(if a[3] > a[j]—>交換)

1  2  3  4   5

int a[5] = ;

//外迴圈 控制輪次

for (int i = 0; i < 5-1; i++) }}

//列印

for (int i = 0; i < 5; i++)

printf("\n");

2. 氣泡排序法

int a[5] = ;

//公升序

//按照 從小到大排序

冒泡法:每一輪都從a[0]開始 依次拿陣列中的相鄰的兩個元素進行比較( a[j] 和 a[j+1]),把大的放後面(if  a[j]  > a[j+1]  —>a[j]和a[j+1]交換)

5  4  3  2  1

第一輪:從a[0]開始比較,相鄰的兩個元素進行比較(a[0]和a[1],a[1]和a[2],a[2]和a[3],a[3]和a[4],) ,把大的放後面(if a[j] > a[j+1]—>交換)

4  3  2  1  5   —》第一輪得到乙個最大的

第二輪:從a[0]開始比較,相鄰的兩個元素進行比較(a[0]和a[1],a[1]和a[2],a[2]和a[3]) ,把大的放後面(if a[j] > a[j+1]—>交換)

3  2  1  4  5

第三輪:從a[0]開始比較,相鄰的兩個元素進行比較(a[0]和a[1],a[1]和a[2]) ,把大的放後面(if a[j] > a[j+1]—>交換)

2  1  3  4  5

第四輪:從a[0]開始比較,相鄰的兩個元素進行比較(a[0]和a[1]) ,把大的放後面(if a[j] > a[j+1]—>交換)

1  2  3  4  5

int a[5] = ;

//外迴圈 控制輪次

for (int i = 0; i < 5-1; i++) }}

//列印

for (int i = 0; i < 5; i++)

printf("\n");

知識碎片 陣列 與 偽陣列

今天在上看到博主寫的一篇部落格,對我還是有幫助的,在這裡記錄一下 js 中的資料型別 分為簡單資料型別 num string null,boolean,undefined 引用資料型別 object,function,array 1.建立物件方法 1 通過字面量的方式建立 2 通過 建構函式 的方式...

知識碎片C

記錄一些c 零碎知識 求map的長度用m.size map沒有default value,但是會使用型別的預設值。例如如果value的型別是int,就會預設為0 型別是string,預設為空字串。map已經排序,如果修改排序方式,兩種方法 重構key型別的operator 使用仿函式 map的ope...

C語言碎片

有關字串陣列 結尾會自動新增字元 0 做結尾,c語言不會檢測陣列的溢位,所以要自己控制記憶體的使用,溢位如果沒有占用的是未使用的位置沒事,但如果恰好後面的記憶體已經被使用,那麼影響比較嚴重。結構體內存分配占用情況 結構體在記憶體分配是會進行記憶體對齊,目的是為了方便記憶體訪問,加快訪問速度。所以,元...