快速上手系列-C語言之數組

我們需要表示某個班級學生的年齡,比如,張三今年3歲,李四今年80歲,很顯然,我們可以用C語言中的某個數據類型來表示,比如int型:int age_zhangsan = 3; int age_lisi = 80; 那如果這個班級有50個同學,我們是不是需要定義50個變量來存放每個同學的年齡呢,當然可以,但是這麼做真的很不合理。類似這樣的問題,用數組就很好解決,同樣的問題我們可以用 int ages[50]; 來表示,簡單明瞭。

繼上一篇《快速上手系列-C語言之基礎篇(二)》寫數據類型和運算符相關內容之後,這裡簡單介紹一下C語言中非常常用的一種數據結構,即數組。

數組的基本概念:

1、在程序設計中,為了方便處理數據,把具有相同類型的若干變量按有序的形式組織起來,這些按序排列的相同類型數據元素的集合稱為數組。數組往往被認為是一系列相同類型的變量,就像你去擼串兒,有羊肉串,有豬肉大串,也有串土豆片的等等,但很少有一串上既給你串了土豆又串了羊肉的,因為它們不是一個類型的,價格不一樣串在一起不好算錢不是。

2、在C語言中,數組屬於構造數據類型

一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或構造類型.按數組元素類型的不同,數組可分為數值數組、字符數組、指針數組、結構體數組等類別int a[10] = {1, 2, 3, 4, 5, 6}; //一維數組,整型數組a,有10個元素int b[4][2]={ {1, 2}, {3, 4}, {5, 6}, {7, 8} }; //二維數組,有四個元素,每個元素都是一個一維數組char buf[5] = {‘a’,’b’,’c’}; //字符數組struct student stus[5]; //結構體數組char buf[6] = {“hello”};char *q[10] = {&a[0], &a[1], &a[2]};char (*q)[10] = &a;

一維數組:

1、一維數組:

同一個數組,所有元素的數據類型是相同的.數組名的書寫規則應符合標識符的書寫規定.數組名不能與其它變量名相同,以下是錯誤的:void main( ){ int num; float num[10];}方括號中常量表達式表示數組元素的個數;如a[3]表示數組a有3個元素,其下標從0開始計算,因此3個元素分別為a[0],a[1],a[2]不能在方括號中用變量來表示元素的個數,但是可以是符號常數或常量表達式,例如:#define NUM 5void main( ){ int n = 10; int a[n]; //錯誤 int a[3+2], int a[2+NUM];}

2、一維數組的初始化:

在定義數組的同時對其進行賦值,稱為初始化可以只給部分元素賦初值 當{ }中數值少於元素個數時,只給前面部分元素賦值 例如:int a[10]={0, 1, 2, 3, 4}; 只給a[0]~a[4]5個元素賦值,後5個元素自動賦0只能給元素逐個賦值,不能給數組整體賦值 例如:給5個元素全部賦1值 正確:int a[5]={1,1,1,1,1}; 錯誤:int a[5]=1;給全部元素賦值時,可以不給出數組元素的個數 例如: int a[5]={1,2,3,4,5}; 可寫為: int a[ ]={1,2,3,4,5};注意:全局數組若不初始化,編譯器將其初始化為零,局部數組若不初始化,內容為隨機值;

3、一維數組的引用:

數組元素也是一種變量,其標識方法為數組名後跟一個下標,在C語言中只能逐個地使用下標變量,而不能一次引用整個數組:

二維數組

1、二維數組(在邏輯上二維數組是矩陣)

數組若只有一個下標,稱為一維數組,其數組元素也稱為單下標變量;在實際問題中有很多量是二維的或多維的,例如代數中的矩陣、生產中的報表;因此C語言允許構造多維數組;多維數組元素有多個下標,以標識它在數組中的位置,所以也稱為多下標變量;多維數組可由二維數組類推而得到

2、二維數組的定義

int a[3][4];定義了一個三行四列的數組,數組名為a,其元素類型為整型,該數組的元素個數為3×4個,即: a[0][0], a[0][1], a[0][2], a[0][3] a[1][0], a[1][1], a[1][2], a[1][3] a[2][0], a[2][1], a[2][2], a[2][3]二維數組在概念上是二維的,即其下標在兩個方向上變化。實際的硬件存儲器卻是連續編址的,也就是說存儲單元是按線性排列的,即放完一行之後順次放入第二行。

3、二維數組的初始化

例如:數組a[2][3]按行分段賦值可寫為:int a[2][3]={ {80, 75, 92}, {61, 65, 71} };按行連續賦值可寫為:int a[2][3]={ 80, 75, 92, 61, 65, 71 };

4、二維數組的引用:

比如我們定義一個2行3列的二維數組 a[2][3]; 分別按列和按行打印出每個元素:

字符數組:

1、字符數組的定義:

初始化賦值的時候可以不給定數組的大小,如char buf[6]="hello"; 可以寫成char buf[]="hello";

char buf1[] = {'h', 'e', 'l', 'l', 'o'}; //沒有'\0'char buf2[] = “hello"; //有'\0'

注:這裡需要注意一下,使用printf打印buf1和buf2,打印出現這種結果是因為printf遇到‘\0’結束。buf2含有'\0',使用printf打印遇到結束符'\0'就會結束,打印結果正常。而buf1沒有'\0',輸出hello後會繼續輸出內存中的數據,直到遇到結束符'\0'為止。

char a[][6] = { //一定要給出列數 {‘h’,’e’,’l’,’l’,’o’}, {‘a’,’b’,’c’,’d’,’e’}};char a[][6] = { “hello” , “world” }

2、字符數組的引用:

用字符串方式賦值比用字符逐個賦值要多佔1個字節,用於存放字符串結束標誌‘\0’;注:'\0'是由C編譯系統自動加上的

如char buf[] = "hello"; 數組buf在內存中的實際存放情況為:'h', 'e', 'l', 'l', 'o', '\0';

這篇內容暫且就寫這麼多吧,下篇簡單寫寫C語言函數方面相關內容,想了解的夥伴們可以隨時關注。