指針數(shù)組也可以用作函數(shù)參數(shù)。在本例主函數(shù)中,定義了一個(gè)指針數(shù)組name,并對(duì)name 作了初始化賦值。其每個(gè)元素都指向一個(gè)字符串。然后又以name 作為實(shí)參調(diào)用指針型函數(shù)day name,在調(diào)用時(shí)把數(shù)組名 name 賦予形參變量name,輸入的整數(shù)i作為第二個(gè)實(shí)參賦予形參n。在day name函數(shù)中定義了兩個(gè)指針變量pp1和pp2,pp1被賦予name[0]的值(即*name),pp2被賦予name[n]的值即*(name+ n)。由條件表達(dá)式?jīng)Q定返回pp1或pp2指針給主函數(shù)中的指針變量ps。最后輸出i和ps的值。
指針數(shù)組作指針型函數(shù)的參數(shù)
main(){
static char *name[]={ "Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
char *ps;
int i;
char *day_name(char *name[],int n);
printf("input Day No:\n");
scanf("%d",&i);
if(i<0) exit(1);
ps=day_name(name,i);
printf("Day No:%2d-->%s\n",i,ps);
}
char *day_name(char *name[],int n)
{
char *pp1,*pp2;
pp1=*name;
pp2=*(name+n);
return((n<1||n>7)? pp1:pp2);
}
下例要求輸入5個(gè)國(guó)名并按字母順序排列后輸出。在以前的例子中采用了普通的排序方法, 逐個(gè)比較之后交換字符串的位置。交換字符串的物理位置是通過字符串復(fù)制函數(shù)完成的。 反復(fù)的交換將使程序執(zhí)行的速度很慢,同時(shí)由于各字符串(國(guó)名) 的長(zhǎng)度不同,又增加了存儲(chǔ)管理的負(fù)擔(dān)。 用指針數(shù)組能很好地解決這些問題。把所有的字符串存放在一個(gè)數(shù)組中, 把這些字符數(shù)組的首地址放在一個(gè)指針數(shù)組中,當(dāng)需要交換兩個(gè)字符串時(shí), 只須交換指針數(shù)組相應(yīng)兩元素的內(nèi)容(地址)即可,而不必交換字符串本身。程序中定義了兩個(gè)函數(shù),一個(gè)名為sort完成排序, 其形參為指
針數(shù)組name,即為待排序的各字符串?dāng)?shù)組的指針。形參n為字符串的個(gè)數(shù)。另一個(gè)函數(shù)名為print,用于排序后字符串的輸出,其形參與sort的形參相同。主函數(shù)main中,定義了指針數(shù)組name 并作了初始化賦值。然后分別調(diào)用sort函數(shù)和print函數(shù)完成排序和輸出。值得說明的是在sort函數(shù)中,對(duì)兩個(gè)字符串比較,采用了strcmp 函數(shù),strcmp函數(shù)允許參與比較的串以指針方式出現(xiàn)。name[k]和name[ j]均為指針,因此是合法的。字符串比較后需要交換時(shí), 只交換指針數(shù)組元素的值,而不交換具體的字符串, 這樣將大大減少時(shí)間的開銷,提高了運(yùn)行效率。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |