正文 第34章 指針7(1 / 2)

實參數組名代表該數組首元素的地址,而形參是用來接收從實參傳遞過來的數組首元素地址,因此形參應該是一個指針變量(隻有指針變量才能存放地址)。實際上,C語言編譯係統都是將形參數組名作為指針變量來處理的。如果數組是一維數組,則按指向數組元素的指針來處理;如果數組是二維數組,則按指向由m個元素的一維數組的指針變量來處理。例如,函數f的形參寫成一維數組的形式:

f(intarr[],intn)

但在編譯時則將一維數組名arr按指針變量處理,相當於將函數f的首部寫成

f(int*arr,intn)

以上兩種寫法是等價的。在調用該函數時,係統會建立一個指針變量arr,用來存放從主調函數傳遞過來的實參數組首元素的地址。同樣的道理:

f(intarr[][3],intn)與f(int(*arr)[3],intn)

兩種寫法也是等價的。

[例1014]將數組a中n個整數按相反順序存放。

(1)設置三個變量i、j、m,初始化i=0,j=n-1,m=n/2。

(2)將a[i]和a[j]的值交換,然後使i=i+1。

(3)當i的值小於m的值就轉到(2),直到i的值等於m的值為止。

voidinverse(intx[],intn)

inttemp,i,j,m=n/2;

for(i=0;i

j=n-1-i;

temp=x[i];x[i]=x[j];x[j]=temp;

voidprint(intx[],intn)

inti;

for(i=0;i

printf("%d",x[i]);

printf("\n");

main()

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

print(a,10);

inverse(a,10);

print(a,10);

輸出結果為:

0123456789

9876543210

在程序中,形參和實參都為數組名,對這個程序可以作如下改動:

voidinverse(int*x,intn)

int*p,temp,*y,m=n/2;

y=x+n-1;p=x+m;

for(;x

temp=*x;*x=*y;*y=temp;

voidprint(intx[],intn)

inti;

for(i=0;i

printf("%d",x[i]);

printf("\n");

voidmain()

inta[10]={0,1,2,3,4,5,6,7,8,9},*p;

p=a;