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