網站首頁 個人文件 個人總結 工作總結 述職報告 心得體會 演講稿 講話致辭 實用文 教學資源 企業文化 公文 論文

C語言陣列的定義及引用(精品多篇)

欄目: 實用文精選 / 釋出於: / 人氣:1.44W

C語言陣列的定義及引用(精品多篇)

C語言陣列的定義及引用 篇一

例子:輸出一個 4×4 的整數矩陣,程式碼如下:

#include #include int main(){ int a1=20, a2=345, a3=700, a4=22; int b1=56720, b2=9999, b3=20098, b4=2; int c1=233, c2=205, c3=1, c4=6666; int d1=34, d2=0, d3=23, d4=23006783; printf(“%-9d %-9d %-9d %-9d ”, a1, a2, a3, a4); printf(“%-9d %-9d %-9d %-9d ”, b1, b2, b3, b4); printf(“%-9d %-9d %-9d %-9d ”, c1, c2, c3, c4); printf(“%-9d %-9d %-9d %-9d ”, d1, d2, d3, d4); system(“pause”); return 0;}

執行結果:

20 345 700 22

56720 9999 20098 2

233 205 1 6666

34 0 23 23006783

矩陣共有 16 個整數,我們為每個整數定義了一個變數,也就是 16 個變數。那麼,為了減少變數的數量,讓開發更有效率,能不能為多個數據定義一個變數呢?比如,把每一行的整數放在一個變數裡面,或者把 16 個整數全部都放在一個變數裡面。

我們知道,要想把資料放入記憶體,必須先要分配記憶體空間。放入4個整數,就得分配4個int型別的記憶體空間:

int a[4];

這樣,就在記憶體中分配了4個int型別的記憶體空間,共 4×4=16 個位元組,併為它們起了一個名字,叫a。

我們把這樣的一組資料的集合稱為陣列(Array),它所包含的每一個數據叫做陣列元素(Element),所包含的資料的個數稱為陣列長度(Length),例如int a[4];就定義了一個長度為4的整型陣列,名字是a。

陣列中的每個元素都有一個序號,這個序號從0開始,而不是從我們熟悉的1開始,稱為下標(Index)。使用陣列元素時,指明下標即可,形式為:

arrayName[index]

arrayName 為陣列名稱,index 為下標。例如,a[0] 表示第0個元素,a[3] 表示第3個元素。

接下來我們就把第一行的4個整數放入陣列:

a[0]=20;

a[1]=345;

a[2]=700;

a[3]=22;

這裡的0、1、2、3就是陣列下標,a[0]、a[1]、a[2]、a[3] 就是陣列元素。

我們來總結一下陣列的定義方式:

dataType arrayName[length];

dataType 為資料型別,arrayName 為陣列名稱,length 為陣列長度。例如:

float m[12];

char ch[9];

需要注意的是:

1) 陣列中每個元素的資料型別必須相同,對於int a[4];,每個元素都必須為 int。

2) 陣列長度 length 最好是整數或者常量表達式,例如 10、20*4 等,這樣在所有編譯器下都能執行通過;如果 length 中包含了變數,例如 n、4*m 等,在某些編譯器下就會報錯,我們將在《C語言變長陣列》一節專門討論這點。

3) 訪問陣列元素時,下標的取值範圍為 0 ≤ index < length,過大或過小都會越界,導致陣列溢位,發生不可預測的情況,我們將在《C語言陣列的靜態性、越界以及溢位》一節重點討論,請大家務必要引起注意。

4) 陣列是一個整體,它的記憶體是連續的,下面是int a[4];的記憶體示意圖:

陣列的初始化

上面的程式碼是先定義陣列再給陣列賦值,我們也可以在定義陣列的同時賦值:

int a[4] = {20, 345, 700, 22};

{ }中的值即為各元素的初值,各值之間用,間隔。

對陣列賦初值需要注意以下幾點:

1) 可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:

int a[10]={12, 19, 22 , 993, 344};

表示只給 a[0]~a[4] 5個元素賦值,而後面5個元素自動賦0值。

當賦值的元素少於陣列總體元素的時候,剩餘的元素自動初始化為 0:對於short、int、long,就是整數0;對於char,就是字元 '';對於float、double,就是小數0.0。

我們可以通過下面的形式將陣列的所有元素初始化為 0:

int a[10] = {0};

char c[10] = {0};

float f[10] = {0};

由於剩餘的元素會自動初始化為0,所以只需要給第0個元素賦0值即可。

示例:輸出陣列元素。

#include int main(){ int a[6] = {299, 34, 92, 100}; int b[6], i; //從控制檯輸入資料為每個元素賦值 for(i=0; i<6; i++){ scanf(“%d”, &b[i]); } //輸出陣列元素 for(i=0; i<6; i++){ printf(“%d ”, a[i]); } put' '); for(i=0; i<6; i++){ printf(“%d ”, b[i]); } put' '); return 0;}

執行結果:

90 100 33 22 568 10

299 34 92 100 0 0

90 100 33 22 568 10

2) 只能給元素逐個賦值,不能給陣列整體賦值。例如給十個元素全部賦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 #include int main(){ int a[4] = {20, 345, 700, 22}; int b[4] = {56720, 9999, 20098, 2}; int c[4] = {233, 205, 1, 6666}; int d[4] = {34, 0, 23, 23006783}; printf(“%-9d %-9d %-9d %-9d ”, a[0], a[1], a[2], a[3]); printf(“%-9d %-9d %-9d %-9d ”, b[0], b[1], b[2], b[3]); printf(“%-9d %-9d %-9d %-9d ”, c[0], c[1], c[2], c[3]); printf(“%-9d %-9d %-9d %-9d ”, d[0], d[1], d[2], d[3]); system(“pause”); return 0;}

C語言陣列的定義及引用 篇二

指標陣列說明的一般形式為:

型別說明符 *陣列名[陣列長度]

其中型別說明符為指標值所指向的變數的型別。例如:

int *pa[3]

表示pa是一個指標陣列,它有三個陣列元素,每個元素值都是一個指標,指向整型變數。

【例10-33】通常可用一個指標陣列來指向一個二維陣列。指標陣列中的每個元素被賦予二維陣列每一行的首地址,因此也可理解為指向一個一維陣列。

main(){

int a[3][3]={1,2,3,4,5,6,7,8,9};

int *pa[3]={a[0],a[1],a[2]};

int *p=a[0];

int i;

for(i=0;i<3;i++)

printf(“%d,%d,%d ”,a[i][2-i],*a[i],*(*(a+i)+i));

for(i=0;i<3;i++)

printf(“%d,%d,%d ”,*pa[i],p[i],*(p+i));

}

本例程式中,pa是一個指標陣列,三個元素分別指向二維陣列a的各行。然後用迴圈語句輸出指定的陣列元素。其中*a[i]表示i行0列元素值;*(*(a+i)+i)表示i行i列的元素值;*pa[i]表示i行0列元素值;由於p與a[0]相同,故p[i]表示0行i列的值;*(p+i)表示0行i列的值。讀者可仔細領會元素值的各種不同的表示方法。

應該注意指標陣列和二維陣列指標變數的區別。這兩者雖然都可用來表示二維陣列,但是其表示方法和意義是不同的。

二維陣列指標變數是單個的變數,其一般形式中“(*指標變數名)”兩邊的括號不可少。而指標陣列型別表示的是多個指標(一組有序指標)在一般形式中“*指標陣列名”兩邊不能有括號。例如:

int (*p)[3];

表示一個指向二維陣列的指標變數。該二維陣列的列數為3或分解為一維陣列的長度為3。

int *p[3]

表示p是一個指標陣列,有三個下標變數p[0],p[1],p[2]均為指標變數。

指標陣列也常用來表示一組字串,這時指標陣列的每個元素被賦予一個字串的首地址。指向字串的指標陣列的初始化更為簡單。例如在例10.32中即採用指標陣列來表示一組字串。其初始化賦值為:

char *name[]={“Illagal day”,

“Monday”,

“Tuesday”,

“Wednesday”,

“Thursday”,

“Friday”,

“Saturday”,

“Sunday”

};

完成這個初始化賦值之後,name[0]即指向字串“Illegal day”,name[1]指向“Monday”。.。.。.。

指標陣列也可以用作函式引數。

【例10-34】指標陣列作指標型函式的引數。在本例主函式中,定義了一個指標陣列name,並對name 作了初始化賦值。其每個元素都指向一個字串。然後又以name作為實參呼叫指標型函式day_name,在呼叫時把陣列名name賦予形參變數name,輸入的整數i作為第二個實參賦予形參n。在day_ name函式中定義了兩個指標變數pp1和pp2,pp1被賦予name[0]的值(即*name),pp2被賦予name[n]的值即*(name+ n)。由條件表示式決定返回pp1或pp2指標給主函式中的指標變數ps。最後輸出i和ps的值。

main(){

static char *name[]={ “Illegal day”,

“Monday”,

“Tuesday”,

“Wednesday”,

“Thursday”,

“Friday”,

“Saturday”,

“Sunday”

};

char *ps;

int i;

char *day_name(char *name[],int n);

printf(“input Day No: ”);

scanf(“%d”,&i);

if(i<0) exit(1);

ps=day_name(name,i);

printf(“Day No:%2d-->%s ”,i,ps);

}

char *day_name(char *name[],int n){

char *pp1,*pp2;

pp1=*name;

pp2=*(name+n);

return((n<1||n>7)? pp1:pp2);

}

【例10-35】輸入5個國名並按字母順序排列後輸出。現程式設計如下:

#include“string.h”

main(){

void sort(char *name[],int n);

void print(char *name[],int n);

static char *name[]={ “CHINA”,“AMERICA”,“AUSTRALIA”,“FRANCE”,“GERMAN”};

int n=5;

sort(name,n);

print(name,n);

}

void sort(char *name[],int n){

char *pt;

int i,j,k;

for(i=0;i

k=i;

for(j=i+1;j

if(strcmp(name[k],name[j])>0) k=j;

if(k!=i){

pt=name[i];

name[i]=name[k];

name[k]=pt;

}

}

}

void print(char *name[],int n){

int i;

for (i=0;i

}

說明:

1) 在以前的例子中採用了普通的排序方法,逐個比較之後交換字串的位置。交換字串的物理位置是通過字串複製函式完成的。反覆的交換將使程式執行的速度很慢,同時由於各字串(國名)的長度不同,又增加了儲存管理的負擔。用指標陣列能很好地解決這些問題。把所有的字串存放在一個數組中,把這些字元陣列的首地址放在一個指標陣列中,當需要交換兩個字串時,只須交換指標陣列相應兩元素的內容(地址)即可,而不必交換字串本身。

2) 本程式定義了兩個函式,一個名為sort完成排序,其形參為指標陣列name,即為待排序的各字串陣列的指標。形參n為字串的個數。另一個函式名為print,用於排序後字串的輸出,其形參與sort的形參相同。主函式main中,定義了指標陣列name 並作了初始化賦值。然後分別呼叫sort函式和print函式完成排序和輸出。值得說明的是在sort函式中,對兩個字串比較,採用了strcmp函式,strcmp函式允許參與比較的字串以指標方式出現。name[k]和name[j]均為指標,因此是合法的。字串比較後需要交換時,只交換指標陣列元素的值,而不交換具體的字串,這樣將大大減少時間的開銷,提高了執行效率。

C語言陣列的定義及引用 篇三

1.1 一維陣列的定義、初始化和引用

1、一維陣列的定義方式為:

型別說明符 陣列名[常量表達式]

(1)陣列名的命名方法與變數名相同,遵循識別符號命名規則;

(2)陣列是用方括號括起來的常量表達式,不能用圓括號;

(3)常量表達式表示陣列元素的個數,即陣列的長度,陣列的下標從0開始,下標的最大值為:常量表達式-1;

(4)常量表達式中可以包括常量和符號常量,不能包括變數。

可以用賦值語句或輸入語句使陣列中的元素得到值,但要佔用執行時間。可以使陣列在執行之前初始化,即在編譯階段使之得到初值。

2、對陣列初始化可以用以下方法實現:

(1)在定義陣列時對陣列元素賦以初值。如:

static int a[10]={0,1,2,3,4,5,6,7,8,9};

經過上面的定義和初始化後,a[0]=0,a[1]=1,…,a[9]=9。

(2)初始化時可以只對一部分元素賦初值。例如:

static int a[10]={0,1,2,3,4};

定義的陣列有10個元素,但只對其中前5個元素賦了初值,後5個元素初值為0。

(3)如果想使一個數組的元素值全部為0,可以用下面的方法:

static int a[10]={0,0,0,0,0,0,0,0,0,0};

不能用:

static int a[10]={0*10};

如果對static型陣列不賦初值,系統會對定義的所有陣列元素自動賦以0值。

(4)在對全部陣列元素賦初值時,可以不指定陣列長度。

3、一維陣列的引用方法是:

C語言規定不能一次引用整個陣列,引用時只能逐個元素引用,陣列元素的表示形式為:

陣列名[下標]

下標可以是整型常量或整型表示式。如:

a[0]=a[5]+a[7]-a[2*3];

1.2 二維陣列的定義、初始化和引用

1、二維陣列定義的一般形式為

型別說明符陣列名[常量表達式][常量表達式]

C語言採用上述定義方法,我們可以把二維陣列看做是一種特殊的一維陣列:它的元素又是一維陣列。在C語言中,二維陣列中元素的排列順序是:先按行存放,再按列存放,即在記憶體中先順序存放第一行的元素,再存放第二行的元素。

2、二維陣列的初始化:二維陣列可以用下面的方法初始化:

(1)分行給二維陣列賦初值。如:

static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

以上賦值把第一個花括號內的資料賦給第一行元素,第二個花括號內資料賦給第二元素…,即按行賦值。

(2)可以將所有的資料寫在一個花括號內,按陣列排列的順序對各元素賦值。

(3)可以對陣列的部分元素賦初值。如:

static int a[3][4]={{1},{5},{9}};

以上賦值的結果是:陣列第一列的元素分別賦了初值1,5,9,其餘元素的值都是0。

(4)如果對二維陣列的全部元素都賦初值,則定義陣列時對第一維的長度可以不指定,但第二維的長度不能省。

3、二維陣列的'引用:二維陣列的元素可以表示為:

陣列[下標][下標]

在引用二維陣列時,必須是單個元素,不能是整個陣列名。下標可以是一個表示式,但不能是變數。如果下標是一個表示式,注意表示式的值不能超出陣列定義的上、下限。