構造型別資料是有基本型別資料按照一定規則組成的。陣列,結構體,共用體都屬於構造型別的資料。陣列是有序資料的集合,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語言不會檢測陣列的溢位,所以要自己控制記憶體的使用,溢位如果沒有占用的是未使用的位置沒事,但如果恰好後面的記憶體已經被使用,那麼影響比較嚴重。結構體內存分配占用情況 結構體在記憶體分配是會進行記憶體對齊,目的是為了方便記憶體訪問,加快訪問速度。所以,元...