print(p,10);
inverse(p,10);
print(p,10);
}
輸出結果為:
0123456789
9876543210
程序運行的結果與前一程序相同。在此程序中,形參為指針變量,實參也為指針變量。
以上兩個程序給出了inverse函數實現的兩種方法,也給出了在main函數中調用inverse函數的兩種方法。把inverse函數實現和在main函數中調用inverse函數進行重新組合,就可以得到形參與實參的另外兩種對應關係:實參用數組名,形參用指針變量;實參為指針變量,形參為數組名。
歸納起來,如果有一個實參數組,想在函數中改變此數組元素的值,實參與形參對應關係有以下四種情況:
(1)形參和實參都用數組名。
(2)實參用數組名,形參用指針變量。
(3)實參形參都用指針變量。
(4)實參為指針變量,形參為數組名。
下麵以一個實例來看看多維數組作為形參的情況。
[例1015]一個班有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));
}