指針函數(shù)可以直接寫固定數(shù)值嗎
9.3.3 數(shù)組名作函數(shù)參數(shù)
數(shù)組名可以作函數(shù)的實(shí)參和形參。如:
array為實(shí)參數(shù)組名,arr為形參數(shù)組名。在學(xué)習(xí)指針變量之后就更容易理解這個(gè)問題了。數(shù)組名就是數(shù)組的首地址,實(shí)參向形參傳送數(shù)組名實(shí)際上就是傳送數(shù)組的地址,形參得到該地址后也指向同一數(shù)組。這就好像同一件物品有兩個(gè)彼此不同的名稱一樣。
同樣,指針變量的值也是地址,數(shù)組指針變量的值即為數(shù)組的首地址,當(dāng)然也可作為函數(shù)的參數(shù)使用,如圖9-7所示。
圖9-7
【例9-13】給一維數(shù)組輸入數(shù)據(jù),用指針傳遞調(diào)用另一函數(shù)求平均值。
【例9-14】將數(shù)組a中的n個(gè)整數(shù)按相反順序存放。
算法為:將a[0]與a[n-1]對換,再a[1]與a[n-2]對換……,直到將a[(n-1/2)]與a[n-int((n-1)/2)]對換。今用循環(huán)處理此問題,設(shè)兩個(gè)“位置指示變量”i和j,i的初值為0,j的初值為n-1。將a[i]與a[j]交換,然后使i的值加1,j的值減1,再將a[i]與a[j]交換,直到i=(n-1)/2為止,如圖9-8所示。
圖9-8
程序如下:
對此程序可以作一些改動。將函數(shù)inv中的形參x改成指針變量。
【例9-15】對例9-14可以作一些改動。將函數(shù)inv中的形參x改成指針變量。
程序如下:
運(yùn)行情況與前一程序相同。
【例9-16】從10個(gè)數(shù)中找出其中最大值和最小值。
調(diào)用一個(gè)函數(shù)只能得到一個(gè)返回值,今用全局變量在函數(shù)之間“傳遞”數(shù)據(jù)。程序如下:
說明:
(1)在函數(shù)max_min_value中求出的最大值和最小值放在max和min中。由于它們是全局,因此在主函數(shù)中可以直接使用。
(2)函數(shù)max_min_value中的語句:
max=min=*array;
array是數(shù)組名,它接收從實(shí)參傳來的數(shù)組numuber的首地址。
*array相當(dāng)于*(&array[0])。上述語句與max=min= array[0];等價(jià)。
(3)在執(zhí)行for循環(huán)時(shí),p的初值為array+1,也就是使p指向array[1]。以后每次執(zhí)行p++,使p指向下一個(gè)元素。每次將*p和max與min比較。將大者放入max,小者放min,如圖9-9所示。
圖9-9
(4)函數(shù)max_min_value的形參array可以改為指針變量類型。實(shí)參也可以不用數(shù)組名,而用指針變量傳遞地址。
【例9-17】程序可改為:
歸納起來,如果有一個(gè)實(shí)參數(shù)組,想在函數(shù)中改變此數(shù)組的元素的值,實(shí)參與形參的對應(yīng)關(guān)系有以下4種:
(1)形參和實(shí)參都是數(shù)組名。
a和x指的是同一組數(shù)組。
(2)實(shí)用數(shù)組,形參用指針變量。
(3)實(shí)參、型參都用指針變量。
(4)實(shí)參為指針變量,型參為數(shù)組名。
【例9-18】用實(shí)參指針變量改寫將n個(gè)整數(shù)按相反順序存放。
注意:main函數(shù)中的指針變量p是有確定值的。即如果用指針變?yōu)閷?shí)參,必須先使指針變量有確定值,指向一個(gè)已定義的數(shù)組。
【例9-19】用選擇法對10個(gè)整數(shù)排序。
說明:函數(shù)sort用數(shù)組名作為形參,也可改為用指針變量,這時(shí)函數(shù)的首部可以改為:sort(int *x,intn)其他可一律不改。
免責(zé)聲明:以上內(nèi)容源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。