數組的基本概念
數組可以說是目前為止講到的第一個真正意義上存儲數據的結構。雖然前面學習的變量也能存儲數據,但變量所能存儲的數據很有限。不僅如此,數組和指針(后續會講)是相輔相成的,學習數組可以為學習指針打下基礎。
那么到底什么是數組呢?顧名思義數組就是很多數的組合!那么這些數有沒有什么要求呢,是不是不管什么數組合在一起都是數組呢?同一數組中存儲的數必須滿足以下兩個條件:
1)這些數的類型必須相同。
2)這些數在內存中必須是連續存儲的。
換句話說,數組是在內存中連續存儲的具有相同類型的一組數據的集合。它所包含的每一個數據叫做數組元素(Element),所包含的數據的個數稱為數組長度(Length),例如int a[4];就定義了一個長度為4的整型數組,名字是a。
數組中的每個元素都有一個序號,這個序號從0開始,而不是從我們熟悉的1開始,稱為下標(Index)。使用數組元素時,指明下標即可,形式為:
arrayName[index]
arrayName 為數組名稱,index 為下標。例如,a[0] 表示第0個元素,a[3] 表示第3個元素。
數組內存是連續的
數組是一個整體,它的內存是連續的;也就是說,數組元素之間是相互挨着的,彼此之間沒有一點點縫隙。下圖演示了int a[4];在內存中的存儲情形:

「數組內存是連續的」這一點很重要,所以我使用了一個大標題來強調。連續的內存為指針操作(通過指針來訪問數組元素)和內存處理(整塊內存的復制、寫入等)提供了便利,這使得數組可以作為緩存(臨時存儲數據的一塊內存)使用。大家暫時可能不理解這句話是什么意思,等后邊學了指針和內存自然就明白了。
數組的初始化
對於數組的初始化需要注意以下幾點:
1) 可以只給部分元素賦值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:
int a[10]={12, 19, 22 , 993, 344};
表示只給 a[0]~a[4] 5個元素賦值,而后面 5 個元素自動初始化為 0。
當賦值的元素少於數組總體元素的時候,剩余的元素自動初始化為 0:
對於short、int、long,就是整數 0;
對於char,就是字符 '\0';
對於float、double,就是小數 0.0。
我們可以通過下面的形式將數組的所有元素初始化為 0:
int nums[10] = {0};
char str[10] = {0};
float scores[10] = {0.0};
由於剩余的元素會自動初始化為 0,所以只需要給第 0 個元素賦值為 0 即可。
2) 只能給元素逐個賦值,不能給數組整體賦值。例如給 10 個元素全部賦值為 1,只能寫作:
int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
而不能寫作:
int a[10] = 1;
3) 如給全部元素賦值,那么在定義數組時可以不給出數組長度。例如:
int a[] = {1, 2, 3, 4, 5};
等價於
int a[5] = {1, 2, 3, 4, 5};
最后,我們借助數組來輸出一個 4×4 的矩陣:
#include<stdio.h>
intmain()
{
inta[4]={20,345,700,22};
intb[4]={56720,9999,20098,2};
intc[4]={233,205,1,6666};
intd[4]={34,0,23,23006783};
printf("%-9d %-9d %-9d %-9d\n",a[0],a[1],a[2],a[3]);
printf("%-9d %-9d %-9d %-9d\n",b[0],b[1],b[2],b[3]);
printf("%-9d %-9d %-9d %-9d\n",c[0],c[1],c[2],c[3]);
printf("%-9d %-9d %-9d %-9d\n",d[0],d[1],d[2],d[3]);
return0;
}
訪問數組元素
數組元素可以通過數組名稱加索引進行訪問。元素的索引是放在方括號內,跟在數組名稱的后邊。例如:
double salary = balance[9];
上面的語句將把數組中第 10 個元素的值賦給 salary 變量。下面的實例使用了上述的三個概念,即,聲明數組、數組賦值、訪問數組:
實例
#include <stdio.h> int main (){ int n[ 10 ]; /* n 是一個包含 10 個整數的數組 */ int i,j;
/* 初始化數組元素 */
for ( i = 0; i < 10; i++ ) { n[ i ] = i + 100; /* 設置元素 i 為 i + 100 */ }
/* 輸出數組中每個元素的值 */ for (j = 0; j < 10; j++ ) { printf("Element[%d] = %d\n", j, n[j] );
}
return 0;}
當上面的代碼被編譯和執行時,它會產生下列結果:
C語言中數組詳解
在 C 中,數組是非常重要的,我們需要了解更多有關數組的細節。下面列出了 C 程序員必須清楚的一些與數組相關的重要概念:
關於數組的基本認識就分享到這里了,關注小編,每天分享更多精彩內容哦!
最后,特別推薦一個分享C/C++和算法的優質內容,學習交流,技術探討,面試指導,簡歷修改...還有超多源碼素材等學習資料,零基礎的視頻等着你!
還沒關注的小伙伴,可以長按關注一下:
