快速上手系列-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 5
  • void 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語言中只能逐個地使用下標變量,而不能一次引用整個數組:
快速上手系列-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]; 分別按列和按行打印出每個元素:

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

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

字符數組:

1、字符數組的定義:

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

  • char buf1[] = {'h', 'e', 'l', 'l', 'o'}; //沒有'\0'
  • char buf2[] = “hello"; //有'\0'
快速上手系列-C語言之數組

注:這裡需要注意一下,使用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語言函數方面相關內容,想了解的夥伴們可以隨時關注。

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


分享到:


相關文章: