首頁 > 軟體

C語言陣列全面總結梳理

2022-02-11 22:00:54

陣列(array)是由一系列型別相同的元素構成。

一般形式:

型別     陣列名  [常數表示式]

一,一維陣列

1.建立和初始化

建立一堆相同元素的集合,以整型為例:

//建立大小為8的整型陣列
int arr1[8];
// []裡面應放常數,因此若:
int num=8;
//則有:
arr2[num];      num為變數,建立失敗
// 此時 arr1 != arr2  
 

初始化就是合理賦值,有多種方式,合理即可:

//指定大小的初始化
int arr1[3]={1,2,3};
//不指定大小的初始化
int arr2[]={1,2,3};
//指定大小的不完全初始化
int arr3[3]={1,2};

這裡建立字元陣列時應注意這種情況:

	char arr1[] = {"abcdef"};
	char arr2[] = {'a','b','c','d','e','f'};

這兩種初始化看著內容相同,但 arr1 不等同於 arr2,這裡我們用 strlen函數 分別求他們的字串長度:

arr1是我們能想到的,但是arr2卻超出預料,原因是strlen遇到字元'' (''為結束標誌)結束讀取,且列印出的個數裡不算字元''.

arr1字串末尾f後面預設有結束標誌,而arr2字元f後面無結束標誌,為隨機值,strlen必須讀取到''才會結束讀取,因此讀取到的為亂數。

	//改寫arr2為:
char arr2[] = {'a','b','c','d','e','f',''};

那麼結果:

2.使用下標存取

陣列是用 [] 來進行下標存取的,陣列下標從0開始。

   如:       arr1[3]={1,2,3};

則資料的下標為:  0 1 2        一一對應

寫個栗子,分別列印 int arr2[5]={1,2,3,4,5}; 的每個元素

注:int sz = sizeof(arr2) / sizeof(arr2[0]);   //通過位元組計算元素個數,確定判斷條件 因為已經知道了元素個數裡可省略 直接令 i<5.

#include <stdio.h>
int main()
{
	int i = 0;
	int arr2[5] = { 1, 2, 3, 4, 5 };         //建立陣列arr2並初始化
	int sz = sizeof(arr2) / sizeof(arr2[0]);   //通過位元組計算元素個數,確定判斷條件
	for (i = 0; i < sz; i++)
	{
		printf("%d ",arr2[i]);            下標從0開始,依次存取每個元素
	}
	return;
}

3.在記憶體中的儲存

由上面的栗子我們直接列印陣列每個元素的記憶體:

觀察不難發現每個元素間相差四個位元組,且地址由低到高。

得到結論:陣列在記憶體中是連續存放的。

二,二維陣列 

1.建立和初始化

一般形式:

型別     陣列名  [常數表示式][常數表示式]

//陣列建立
int arr[3][4];   //三行四列
char arr[3][6];   //三行六列

一維是單行,這裡可將二維理解為行列

初始化也與一維陣列沒多少差別:

//指定大小的初始化
int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};  
//不指定大小的初始化,(行可不指定,但列不可省略,必須指定)
int arr2[][6]={1,2,3};
 
int arr3[][4]={{1,2},{3,4},5,6,7,8,9};   //賦值中{}裡面的{}可代表一行的內容
 
//指定大小的不完全初始化
int arr4[3][2]={1,2,3};

不完全初始化的值為0

2.使用下標存取

二維陣列的存取就很有意思   將二維陣列看成行列 用座標來存取

以  int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};   三行四列  為例:

注:列和行的下標都是從0開始

比如我們想列印6,那麼應該是arr1[1][1],而不是arr1[2][2].

3.在記憶體中的儲存

繼續以arr1為例:

地址依舊是連續的,由低地址到高地址。

三,越界問題

例如:

建立一個陣列  int arr1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};  存取時行不能<0 或 >=3,列不能<0 或 >=4,否則就是陣列越界。

編譯程式碼時,越界不一定會報錯,注意自己檢查。

到此這篇關於C語言陣列全面總結梳理的文章就介紹到這了,更多相關C語言 陣列內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com