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]均爲指針,因此是合法的。字符串比較後需要交換時,只交換指針數組元素的值,而不交換具體的字符串,這樣將大大減少時間的開銷,提高了運行效率。 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、二維數組的'引用:二維數組的元素可以表示爲: 數組[下標][下標] 在引用二維數組時,必須是單個元素,不能是整個數組名。下標可以是一個表達式,但不能是變量。如果下標是一個表達式,注意表達式的值不能超出數組定義的上、下限。C語言數組的定義及引用 篇三
-
在全市新提拔幹部教育培訓班開班儀式的講話
在全市新提拔幹部教育培訓班開班儀式的講話尊敬的各位新提拔幹部:大家上午好!今天,我們在這裏隆重召開全市新提拔幹部教育培訓班開班儀式,這既是對各位同志工作成績的肯定,也是對大家肩負使命的殷切期望。藉此機會,我代表市委、市政府,向剛剛走上新崗位的同志們表示熱...
-
學生綜合素質評價評語【精品多篇】
綜合素質評語篇一1.雖然平日你默默無聞,卻看得出你樣樣要強,你用實際的行動證明,你能行,你用點滴汗水,澆灌着成功的花朵。你有助人爲樂精神,但你還有不少缺點,同學們正以更高標準要求你。願你揚長避短,我永遠是你忠實的朋友,我會做你的有力支持者!2.你有禮貌,愛勞動,發言積...
-
關於中學語文教學反思精品多篇
中學語文教學反思篇一20xx年9月22日,我們一行20人到山東,杜郎口中學是位於魯西南平原上的鄉鎮國中,校門有一條東西走向的公路,四周是都是小白楊樹,沒有村莊。杜郎口中學以前教育教學質量非常差,曾經連續10年在縣裏考覈屬於倒數之列;如今被譽爲全國具有“原創性、開創...
-
我的媽媽【精品多篇】
我的媽媽高中作文篇一“丫頭,別貪吃了,中午練琴30分鐘!”這是媽媽在“遙”控我呢!別聽她的,實際上媽媽比我貪吃。這不說曹操曹操就到了,“丫頭,快過來,沉死我了!”,她提着大包小包從門口進來。哈哈,肯定是買好吃的啦!你有沒有見過一隻“大蟲子”和一隻“小蟲子”,坐在電視機...