1. 程式人生 > >一維陣列和 二維陣列

一維陣列和 二維陣列

    所謂陣列,是無序的元素序列。 若將有限個型別相同的變數的集合命名,那麼這個名稱為陣列名。組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。用於區分陣列的各個元素的數字編號稱為下標。陣列是在程式設計中,為了處理方便, 把具有相同型別的若干元素按無序的形式組織起來的一種形式。 這些無序排列的同類資料元素的集合稱為陣列。

int compact(type *Array,int Count)

陣列型別說明 在C語言中使用陣列必須先進行型別說明。

陣列說明的一般形式為:型別說明符 陣列名 [常量表達式],……; 其中,型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。方括號中的常量表達式表示資料元素的個數,也稱為陣列的長度。

陣列分為一維陣列和多維陣列。這裡簡單說明一下一維陣列和二維陣列!

一維陣列

定義

一維陣列是最簡單的陣列,其邏輯結構是線性表。要使用一維陣列,需經過定義、初始化和應用等過程。

陣列宣告

在陣列的宣告格式裡,"資料型別"是宣告陣列元素的資料型別,可以是java語言中任意的資料型別,包括簡單型別和結構型別。"陣列名"是用來統一這些相同資料型別的名稱,其命名規則和變數的命名規則相同。

舉例:

int x; //宣告名稱為x的int型陣列

x=new int[10]; //x陣列中包含有10個元素,併為這10個元素分配記憶體空間

在宣告陣列時,也可以將兩個語句合併成一行,格式如下:

資料型別  陣列名= new 資料型別[個數];

利用這種格式在宣告陣列的同時,也分配一塊記憶體供陣列使用。如上面的例子可以寫成:

int  x = new int [10];

等號左邊的int[]x相當於定義了一個特殊的變數x,x的資料型別是一個對int型陣列物件的引用,x就是一個數組的引用變數,其引用的陣列元素個數不定。等號右邊的new int[10]就是在堆記憶體中建立一個具有10個int型變數的陣列物件。int  x = new int [10];就是將右邊的陣列物件賦值給左邊的陣列引用變數。

二維陣列

定義

只有一個下表的陣列,稱為一維陣列, 其陣列元素也稱為單下標變數。在實際問題中有很多量是二維的或多維的, 因此C語言允許構造多維陣列。多維陣列元素有多個下標, 以標識它在陣列中的位置,所以也稱為多下標變數。本小節只介紹二維陣列,多維陣列可由二維陣列類推而得到。二維陣列型別說明的一般形式是:

型別說明符陣列名[常量表達式1][常量表達式2]…;

其中常量表達式1表示第一維下標的長度,常量表達式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]

二維陣列在概念上是二維的,即是說其下標在兩個方向上變化, 下標變數在陣列中的位置也處於一個平面之中, 而不是象一維陣列只是一個向量。但是,實際的硬體儲存器卻是連續編址的, 也就是說儲存器單元是按一維線性排列的。如何在一維儲存器中存放二維陣列,可有兩種方式:一種是按行排列, 即放完一行之後順次放入第二行。另一種是按列排列, 即放完一列之後再順次放入第二列。在C語言中,二維陣列是按行排列的。在如上中,按行順次存放,先存放a[0]行,再存放a[1]行,最後存放a[2]行。每行中有四個元素也是依次存放。由於陣列a說明為

int型別,該型別佔兩個位元組的記憶體空間,所以每個元素均佔有兩個 位元組(圖中每一格為一位元組)。

賦值方法

初始化賦值的一般形式為:static型別說明符陣列名[常量表示式]={值,值……值}; 其中static表示是靜態儲存型別, C語言規定只有靜態儲存陣列和外部儲存陣列才可作初始化賦值。

在{ }中的各資料值即為各元素的初值, 各值之間用逗號間隔。例如:static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相當於a[0]=0;a[1]=1...a[9]=9;

特殊的要注意:

陣列名單獨放在()內部,表示的是整個陣列!

&陣列名錶示的是整個陣列!

其餘情況下表示的都是陣列首元素地址!

例:printf("%d\n",sizeof(a));//16
printf("%d\n",sizeof(a+0));//4
printf("%d\n",sizeof(*a));//4
printf("%d\n",sizeof(a+1));//4
printf("%d\n",sizeof(a[1]));//4
printf("%d\n",sizeof(&a));  //4

        printf("%d\n",sizeof(*&a)); //16

printf("%d\n",sizeof(&a+1)); //4

printf("%d\n",sizeof(&a[0]));//4

printf("%d\n",sizeof(&a[0]+1));//4