0.陣列型別 是 由多個元素的組合。
這多個元素的資料型別必須完全一樣。
1.陣列是乙個構造型別,也是最基礎的構造型別了。
2.陣列的個數如下
char a[5]
; char 是所有元素的資料型別。全部都是char
a是陣列名,a是常量(但是不能執行a++
/a--
/++a/
--a)
[5] 陣列有五個成員,分別是:
a[0] a[
1] a[
2] a[
3] a[4]
//2020-8-27 上次聽別人講,陣列也可以認為是指標,
//因為他代表的也是位址,但是他不可以像指標一樣進行加減的操作。
3.陣列在記憶體上是連續的.
4.陣列不會對越界進行檢查
a[5]
=10;/*編譯器不會包錯誤,但是記憶體已經越界了
( 因為char a[5] 最大是a[4])
這個在《c陷阱與缺陷》講解的比較清晰
*/5.陣列名就是陣列的首位址
(這個很類似指標,所以有時候,也講 陣列是指標)
6.a+
1&a+
1&a[0]
+1 移動的為對應型別的大小。
陣列賦值:
1.定義時候賦值
int a[5]
=;
int a[5]
=;int a[5]
=;
int a=
;//陣列大小根據初始化的元素的個數決定
2.先定義後賦值
int a[5]
;for
(i=0
; i<
5; i++)
遍歷:
for(i=0
; i<
sizeof
(a)/
sizeof
(a[0])
; i++
)
練習:
1.從終端上輸入10元素,將這十個元素排序(冒泡)
輸入:10301
53448
16100
25 輸出:145
8101625
3034
100
氣泡排序:
拿相鄰的兩個元素進行比較,如果前面的元素大於後面的
元素,讓這兩個元素進行交換位置,否則不交換。
2.快速排序(對氣泡排序的優化)
原理(個人):以第乙個數作為軸線,從右向左比較如果後者小就二者交換,如果遇到
交換就變換方向,從左向右比較,如果左側值大於軸線值則交換,並在此改變比較方向。
第一輪比較的結果為軸線左邊的全部小於軸線值,軸線右邊的全部大於軸線值。然後遞迴
再從左側選出軸線,從右側選出軸線,依次比較即可。
1.選擇軸值,一般是選取第乙個元素的關鍵碼。有乙個快排的最壞情況就是如果待
排序元素是正序或者逆序,就會將除軸值以外的元素分到軸值的一邊。
2.劃分
①、設定劃分區間:i=first,j=end
②、執行右側掃瞄,直到r[j]小於軸值,將r[j]與r[i]交換,i++
③、執行左側掃瞄,直到r[i]大於軸值,將r[i]與r[j]交換,j–
④、重複二到三直到i=j,確定看軸值的所在位置,返回該位置
注意:1.陣列名是常量 杜絕a++
; 可以a+
12.陣列不會對越界檢查
練習:1.從終端上輸入10元素,將這十個元素排序(冒泡)
輸入:10301
53448
16100
25
輸出:145
8101625
3034
100
氣泡排序:
拿相鄰的兩個元素進行比較,如果前面的元素大於後面的
元素,讓這兩個元素進行交換位置,否則不交換。
int i,j;
i 比較的趟數 n-1
; j 同一趟內比較的次數 n-1
- i
2.使用選擇排序
每次從陣列中取出第乙個元素和後面每乙個元素進行比較,
迴圈一次後找到最小數的下標,然後迴圈一輪後進行數值的
交換,直到所有的數都被遍歷一遍。
int i,j;
i 比較的趟數 n-1
; j 同一趟內比較的次數 起始條件i+
1 結束條件n
int [2]
; int a[3]
[2];
||行數 列數
a[0] 行 a[0]
[0] a[0]
[1] a[1]
a[1]
[0] a[1]
[1] a[2]
a[2]
[0] a[2]
[1]
初始化1.定義時初始化
int a[3]
[2]=
; int a[3]
[2]=
,,};
int a[3]
[2]=
; int a[3]
[2]=
,,};
int a[
2]=,
,};
注意:1.行號可以省略,列號不能省略
2.二維陣列名也是乙個常量,它不能做如下操作a++
2.先定義後初始化
int a[3]
[2];
for(i=
0;i<
3;i++
)
練習:1.列印楊輝三角(前10行)
1111211
3311
4641
151010
51
int a[10]
[10]2.輸入12個數,找到最大數的橫座標和縱座標
int [4]
[3];
char a[3]
; a[
0] a[
1] a[2]
賦值方式
char a=
; char b[10]
="hello";
遍歷方式
for(i=0
; i<
10; i++
)puts(""
);printf
("%s\n"
,a);
//%s遇到'\0'才會結束
練習:1.拷貝strcpy //將乙個陣列的內容拷貝到另外乙個陣列中
2.追加strcat //將乙個陣列的內容追加到另外乙個陣列的尾部
3.比較strcmp
4.長度strlen
char a[10]
[10];
char a[
10]=,
,};for
(i=0
; i<
3; i++
)for
(i=0
; i<
3; i++
)puts(""
);}
2020-8-27
回首再看這一章,陳旭,你發現了什麼?
陣列是使用最多的乙個了。
在後面的結構體中,在結構體中加入陣列元素,也是非常的常見的一種思路。我需要做什麼?我可能需要先學習一段時間了,這樣是最好的選擇。
5 陣列和字串
陣列就是在記憶體中連續的相同型別的變數空間 同乙個陣列所有的成員都是相同的資料型別,同時所有的成員在記憶體中的位址是連續的。乙個陣列可以分解為多個陣列元素 這些陣列元素可以是基本資料型別或構造型別。按陣列元素型別的不同,陣列可分為 數值陣列 字元陣列 指標陣列 結構陣列等類別。通常情況下,陣列元素下...
C 基礎之字元陣列和字串
無意中發現了乙個很有意思的技術型別小品文系列,通過大牛指導菜鳥的方式,講解講c 知識,有的很基礎卻是開發中容易忽略的地方。elminster的專欄 solmyr 的小品文系列之一 字串放在 至此,給出鏈結,原文就不貼了,總結並擴充套件一下方便以後回顧。字元陣列 char 是元素為字元變數的陣列,字串...
C 基礎之字元陣列和字串
無意中發現了乙個很有意思的技術型別小品文系列,通過大牛指導菜鳥的方式,講解講c 知識,有的很基礎卻是開發中容易忽略的地方。elminster的專欄 solmyr 的小品文系列之一 字串放在 至此,給出鏈結,原文就不貼了,總結並擴充套件一下方便以後回顧。字元陣列 char 是元素為字元變數的陣列,字串...