一、函數(shù)的傳值與傳址
說起函數(shù)的傳值與傳址瘤泪,外表看起來很高大上的樣子,其實本質(zhì)是都是傳遞一個數(shù)值而己育八。
在這里引入兩個概念对途,就是函數(shù)的的兩類參數(shù)。分別為:形式參數(shù)(形參)和實際參數(shù)(實參)髓棋。函數(shù)定義時的參數(shù)稱為形參实檀,函數(shù)調(diào)用時使用的參數(shù)稱為實參。(第二點講函數(shù)的調(diào)用也會用到這兩個概念的按声。)
-
eg:使用函數(shù)交換兩個變量的值膳犹。(這里給個例子吧。詳細的會在注釋標出签则。)
#include <stdio.h> int main(void) { int a = 4; int b = 5; printf("a = %d b = %d\n",a,b); //定義兩個變量 int t = a; //swap的傳值 a = b; //進行了有參交換 b = t; //對swap功能進行打包 printf("a = %d b = %d\n",a,b); return 0;
}
二须床、函數(shù)的調(diào)用
函數(shù)調(diào)用的一般形式有兩種:
1函數(shù)語句 :
函數(shù)名 (實參表列); 或 函數(shù)名();[不要求函數(shù)帶返回值]
eg:swap(x,y);2函數(shù)表達式:
m=max(a,b);3函數(shù)的嵌套調(diào)用:
雖然現(xiàn)在的IDE(集成開放環(huán)境)平臺有的允許嵌套定義的,但函數(shù)不能嵌套定義渐裂,為了考慮兼容的問題豺旬,一般都不建議去嵌套定義的。
C語言允許進行嵌套調(diào)用柒凉。eg:
#include<stdio.h>
fun2(int x,int y)
{
int z;
z=2*x-y;
return z;
}
fun1(int x,int y)
{
int z;
z=fun2(x,x+y); //在fun1()內(nèi)調(diào)用fun2()函數(shù)
return z;
}
main()
{
int a,b,c;
printf("Please∽逶摹input two∠ダ獭number:");
scanf("%d%d",&a,&b);
c=fun1(a,b); ///調(diào)用fun1()函數(shù)
printf("%d\n",c);
}4函數(shù)的遞歸調(diào)用
定義:在調(diào)用一個函數(shù)的過程中耘分,又直接或者間接地調(diào)用了該函數(shù)本身,這種形式稱為函數(shù)的遞歸調(diào)用,這個函數(shù)就稱為遞歸函數(shù)求泰。
其實就是一句話:自身調(diào)用自身
一般的形式為:
遞歸返回func(滿足遞歸的條件)
{
if(能使遞歸終止條件)
終止處理;
else
func(趨于遞歸終結(jié)的條件);
}
舉個例子:用遞歸方法求n!(n>0)央渣。
include<stdio.h>
long func(int n) //定義求階乘的函數(shù) func()
{
long m;
if(n==1)
m=1;
else
m= func(n-1)* n; //在函數(shù)的定義中又調(diào)用了自己
return m;
}
main()
{
int n; float y;
printf("input the value of n.\n");
scanf("%d",&n);
printf("%d!=%ld\n",n, func(n)); /輸出n!
}