指針數(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:--->%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)行效率。
現(xiàn)編程如下:
#include"string.h"
main(){
void sort(char *name[],int n);
void print(char *name[],int n);
static char *name[]={ "CHINA","AMERICA","AUSTRALIA",
"FRANCE","GERMAN"};
int n=5;
sort(name,n);
print(name,n);
}
void sort(char *name[],int n){
char *pt;
int i,j,k;
for(i=0;i
for(j=i+1;j
if(k!=i){
pt=name[i];
name[i]=name[k];
name[k]=pt;
}
}
}
void print(char *name[],int n){
int i;
for (i=0;i
2015年全國(guó)職稱計(jì)算機(jī)考試教材(2007模 .. 定價(jià):¥225 優(yōu)惠價(jià):¥213 更多書籍 | |
全國(guó)職稱計(jì)算機(jī)考試速成過關(guān)系列套裝:W .. 定價(jià):¥133 優(yōu)惠價(jià):¥133.0 更多書籍 |