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

print(p,10);

inverse(p,10);

print(p,10);

輸出結果為:

0123456789

9876543210

程序運行的結果與前一程序相同。在此程序中,形參為指針變量,實參也為指針變量。

以上兩個程序給出了inverse函數實現的兩種方法,也給出了在main函數中調用inverse函數的兩種方法。把inverse函數實現和在main函數中調用inverse函數進行重新組合,就可以得到形參與實參的另外兩種對應關係:實參用數組名,形參用指針變量;實參為指針變量,形參為數組名。

歸納起來,如果有一個實參數組,想在函數中改變此數組元素的值,實參與形參對應關係有以下四種情況:

(1)形參和實參都用數組名。

(2)實參用數組名,形參用指針變量。

(3)實參形參都用指針變量。

(4)實參為指針變量,形參為數組名。

下麵以一個實例來看看多維數組作為形參的情況。

[例1015]一個班有3個學生,各學4門課程,求第n個學生的成績。

voidsearch(intarr[][4],intn)

inti;

printf("thescoreofNo.%dare:",n);

for(i=0;i

printf("%d",arr[n][i]);

voidmain()

{intn=1;

intscore[3][4]={{60,70,80,90},{65,75,85,95},{72,82,92,98}};

search(score,n);

用指向m個元素組成的一維數組的指針變量來作為函數的形參,如下:

voidsearch(int(*arr)[4],intn)

inti;

printf("thescoreofNo.%dare:",n);

arr=arr+n;

for(i=0;i

printf("%d",*(*arr+i));

voidmain()

intscore[3][4]={{60,70,80,90},{65,75,85,95},{72,82,92,98}};

search(score,1);

提醒讀者注意的是:當數組名作為函數的參數時,由於它的本質是一個指針變量,所以在函數執行期間,它可以再次被賦值。例如,把search函數改成以下形式也是正確的。

voidsearch(intarr[][4],intn)

inti;

printf("thescoreofNo.%dare:",n);

arr=arr+n;

for(i=0;i

printf("%d",*(*arr+i));