C語言的數(shù)組有動態(tài)數(shù)組和靜態(tài)數(shù)組兩種。
創(chuàng)新互聯(lián)長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為禹會企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作,禹會網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
1 靜態(tài)數(shù)組。
對于靜態(tài)數(shù)組,無法新增加數(shù)組成員數(shù)量。
所以一定要最初始定義足夠大的數(shù)組,然后可以用一個整型變量維護數(shù)組中現(xiàn)有成員個數(shù),再動態(tài)增加實際成員個數(shù)。
比如
int?a[1000];
int?n?=?0;
while(scanf("%d",a[n])?!=?EOF)?n?++;
這樣的代碼就可以實現(xiàn)增加數(shù)組成員數(shù)的類似效果。n為實際成員個數(shù)。
2 動態(tài)數(shù)組。
動態(tài)數(shù)組是可以隨時改變數(shù)組成員個數(shù)的。不過為了確定當(dāng)前數(shù)組個數(shù),需要用兩個整型變量來保存最大成員數(shù),和已有成員數(shù),這樣就可以在不夠的時候進行擴大。
int?n?=?0,?size?=?100;?//n為當(dāng)前元素個數(shù),size為數(shù)組大小,初始為100.
int?*a?=?NULL;//數(shù)組指針。
a?=?(int?*)malloc(sizeof(int)?*?size);?//?初始分配100個元素。
while(scanf("%d",a[n])?!=?EOF)?
{
n++;
if(n?=?size)//空間不足。
{
size+=100;//增加100個元素空間。
a?=?(int?*)realloc(sizeof(int)*size,?a);//重新分配空間。
}
}
定義int arr[5] = {20, 10, 5, 39, 88};時,系統(tǒng)產(chǎn)生一個有5個元素的一維數(shù)組,5個元素分別是arr[0]到arr[4],對應(yīng)的各個元素的地址分別是arr到arr+4。
當(dāng)用sum(arr, arr + 5));計算數(shù)組總和時,sum是一個自定義函數(shù),其內(nèi)容是由編程人書寫的。
如果這個函數(shù)是這樣寫:
int sum(int*a,int*b){
int*p,s;
for(p=a,s=0;pb;p++)
s+=*p;
return s;
}
就能得到正確的結(jié)果。
你說的“arr指向數(shù)組的首地址”是正確的,但“對arr+5后不是相當(dāng)于arr[6]了吧”是錯誤的,因為arr+5是元素arr[5]的地址。但即使這樣,如果自定義函數(shù)不加arr[5](像上面的例子),程序是能夠得到正確的結(jié)果的。但是,如果不這樣寫,可能會造成這樣數(shù)組下標越界。
這取決于函數(shù)sum是怎樣寫的。
最主要的,sum后面的arr與arr+5,只是兩個參數(shù),并不是加法的對象,這一點一定要搞清楚。
形參,可以是數(shù)組也可以是指針,形參變量名不需要和實參一樣,所以可不使用a做變量名。但數(shù)組傳參,傳的地址,即使閉實參和形參名不一樣,操作的地址都是一樣的。
方法
有2
將該數(shù)組定義為全局變量,即:
int
g_arr;
void
fun()
{...}
void
main()
{...}
2.將該數(shù)組作為函數(shù)參數(shù)傳遞到自定義函數(shù)里,即:
void
fun(int
arr[])
{...}
void
main()
{
int
arr[10];
fun(arr);
}
用指針就可以了,如
定義有int a[5];
則這樣定義函數(shù):
int fun(int *p, int size)
{
//p為數(shù)組的首地址
//size為數(shù)組的大小
//傳遞進去后可以像操作a一樣用下標操作p
//如p[0], p[4]...
}
傳遞參數(shù)給函數(shù)可以這樣寫:
fun(a, 5);
若是多維數(shù)組,則第一維大小不給出,只指定后面的維數(shù)大小,如:
定義有int a[5][2];
則這樣定義函數(shù):
int fun(int p[][2], int size)
{
//p為數(shù)組的首地址
//size為第一維的大小
//傳遞進去后可以像操作a一樣用下標操作p
//如p[0][1], p[4][1]...
}
傳遞參數(shù)給函數(shù)可以這樣寫:
fun(a, 5);
#include stdio.h
int fun(int a[5], int n)//求數(shù)組前n個元素的和
{
int sum = 0, i;
for (i = 0; i n; i++)
{
sum += a[i];
}
return sum;
}
int main()
{
int a[5] = {1, 2, 3, 4, 5};
printf ("%d\n", fun(a, 5));
}