一、陣列
什么是陣列:變數的組合,是一種批量定義相同型別變數的方式
定義: 型別名 陣列名[數量];
int arr[5];
注意:陣列的長度一旦確定,無法改變
使用:陣列名[下標];
下標:從0開始,范圍:0~數量-1
遍歷:把陣列的資料從頭到尾顯示或訪問
一般與for回圈配合,把回圈變數i當做陣列下標
初始化:
型別名 陣列名[數量] = {1,2,3,4,...};
1、陣列與變數一樣,默認值隨機,所以一般都要先初始化
2、陣列不能整體初始化,只能逐個初始化
int arr[20]=0 false
3、這種初始化的語法只能在定義陣列時使用
int arr[10]//表示已經對這個陣列進行了定義,但沒有初始化
arr={12,3,2}//這樣是會報錯的,因為arr表示的地址編號常量賦值是不允許的
arr[10]={12,23,4}//這樣也會報錯,因為這是一個下標為10的單個陣列,已經越界了,所以不能進行這樣的操作,
4、初始化資料過多,編譯器會產生警告并丟棄,但是會根據下標的多少來進行舍去 例如:int arr[2]={1,2.3};//這樣的話就會1和2會被存到了0和1的下標里,但是3會被舍棄掉,同時會產生警告
5、初始化資料不足,編譯器會自動補0
6、初始化資料可以全部省略,只寫大括號,相當于全部成員初始化為0
7、如果有初始化資料,則可以省略陣列數量,因為編譯器會自動統計資料的個數,然后確定陣列的數量
計算陣列的總位元組:sizeof(arr)
計算陣列成員的位元組數:sizeof(arr[0])
計算陣列長度的公式:
sizeof(arr)/sizeof(arr[0])
練習1:定義一個長度為10的陣列并初始化,計算最大值、最小值、平均值
練習2:定義一個長度為10的陣列并初始化,降序排序
33 32 23 3 6 7 5 3 23
i
j
二、陣列越界問題
為了程式的運行效率考慮,C語言不檢查陣列下標是否越界
資料越界的后果:
1、一切正常
2、段錯誤(核心已轉儲)
3、臟資料
練習3:定義一個長度為10的陣列并初始化,找出陣列中第二大的值,不能排序
三、二維陣列
一維陣列相當于把變數排成一排,通過編號來訪問
二維陣列相當于把變數排成一個矩陣,通過行號和列號訪問
二維陣列在記憶體中依然是連續存盤的
定義:
型別名 陣列名[行數][列數];
int arr[4][5];
[0,0][0,1][0,2][0,3][0,4]
[1,0][1,1][1,2][1,3][1,4]
[2,0][2,1][2,2][2,3][2,4]
[3,0][3,1][3,2][3,3][3,4]
使用:陣列名[行下標][列下標];
行下標:0~行數-1
行下標:0~列數-1
遍歷:一般需要與雙層for回圈配合,外層回圈負責遍歷行,內層回圈負責遍歷列
int arr[4][5];
for(int i=0; i<4; i++)
{
for(int j=0; j<5; j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
初始化:
型別名 陣列名[行數][列數]={{第一行},{第二行},...};
注意:
1、大括號內資料可以全部省略,那么就自動補0
2、大括號資料和列數不省略,行數可以省略,編譯器會自動計算行數
3、不能省略二維陣列的列數
四、變長陣列
定義陣列時,使用變數作為陣列的長度,這種陣列稱為變長陣列
特點:在代碼編譯期間陣列的長度是不確定的,當執行到陣列的定義陳述句時長度才最終確定下來,并且一旦確定長度也無法改變
int n = 0;
scanf("%d",&n);
int arr[n];
優點:可以根據實際情況來確定陣列的長度,從而節約記憶體
缺點:初始化發生在編譯期間,而可變長陣列長度的確定發生在運行期間,因此可變長陣列無法初始化
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/557110.html
標籤:其他
上一篇:Docker學習路線3:安裝設定
下一篇:返回列表