例4:
#include
void subfun(int *m, int *n); /*說(shuō)明子函數(shù)*/
int main()
{
int i, j;
printf("i, j=?\n");
scanf("%d, %d", &i, &j); /*從鍵盤(pán)輸入2個(gè)整數(shù)*/
printf("In main before calling\n"/*輸出此2數(shù)及其乘積*/
"i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
subfun(&i, &j); /*以傳送地址的方式調(diào)用子函數(shù)*/
printf("In main after calling\n"/*調(diào)用子函數(shù)后輸出變量值*/
"i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
getch();
return 0;
}
void subfun(int *m, int *n)
{
*m=*m+2;
*j=*i-*j;
printf("In subfun after calling\n" /*子函數(shù)中輸出變量值*/
"i=%-4d j=%-4d i*j=%-4d\n", *i, *j, *i**j);
}
上例中, *i**j表示指針i和j所指的兩個(gè)整型數(shù)*i和*j之乘積。
另外, return語(yǔ)句也可以返回一個(gè)指針, 舉例如下。
下例中先等待輸入一字符串, 再等待輸入要查找的字符, 然后調(diào)用match() 函數(shù)在字符串中查找該字符。若有相同字符, 則返回一個(gè)指向該字符串中這一位置的指針, 如果沒(méi)有找到, 則返回一個(gè)空(NULL)指針。
例5:
#include
char *match(char c, char *s);
int main()
{
char s[40], c, *str;
str=malloc(40); /*為字符串指什分配內(nèi)存空間*/
printf("Please input character string:");
gets(s); /*鍵盤(pán)輸入字符串*/
printf("Please input one character:");
c=getche(); /*鍵盤(pán)輸入字符*/
str=match(c, s); /*調(diào)用子函數(shù)*/
putchar('\n');
puts(str); /*輸出子函數(shù)返回的指針?biāo)傅淖址?/
getch();
return 0;
}
char *match(char c, char *s)
{
int i=0;
while(c!=s[i]&&s[i]!='\n')/*找字符串中指定的字符*/
i++;
return(&s[i]); /*返回所找字符的地址*/
}
三、用全程變量實(shí)現(xiàn)參數(shù)互傳
以上兩種辦法可以在調(diào)用函數(shù)和被調(diào)用函數(shù)間傳遞參數(shù), 但使用不太方便。如果將所要傳遞的參數(shù)定義為全程變量, 可使變量在整個(gè)程序中對(duì)所有函數(shù)都可見(jiàn)。這樣相當(dāng)于在調(diào)用函數(shù)和被調(diào)用函數(shù)之間實(shí)現(xiàn)了參數(shù)的傳遞和返回。這也是實(shí)際中經(jīng)常使用的方法, 但定義全程變量勢(shì)必長(zhǎng)久地占用了內(nèi)存。因此, 全程變量的數(shù)目受到限制, 特別對(duì)于較大的數(shù)組更是如此。當(dāng)然對(duì)于絕大多數(shù)程序內(nèi)存都是夠用的。
例6:
#incluide
void disp(void);
int m[10]; /*定義全程變量*/
int main()
{
int i;
printf("In main before calling\n");
for(i=0; i<10; i++){
m[i]=i;
printf("%3d", m[i]); /*輸出調(diào)用子函數(shù)前數(shù)組的值*/
}
disp(); /*調(diào)用子函數(shù)*/
printf("\nIn main after calling\n");
for(i=0; i<10; i++)
printf("%3d", m[i]); /*輸出調(diào)用子函數(shù)后數(shù)組的值*/
getch();
return 0;
}
void disp(void)
{
int j;
printf("In subfunc after calling\n");/*子函數(shù)中輸出數(shù)組的值*/
for (j=0; i<10; j++){
m[j]=m[j]*10;
printf("%3d", m[i]);
}
}
相關(guān)推薦:計(jì)算機(jī)等考二級(jí)C語(yǔ)言備考:C語(yǔ)言/C++編譯過(guò)程北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |