1. 程式人生 > >c語言基礎之函式

c語言基礎之函式

實參和形參

主調與被調函式間有資料傳遞關係,這就是有參函式

在定義函式時,函式名後面括號中的變數名稱為“形式引數”,

在主調函式呼叫一個函式時,函式名後面括號中的引數(可以是表示式)稱為“實際引數”。

注意:發生呼叫時,呼叫函式把實參的值複製一份,傳送給被呼叫函式的形參,從而實現呼叫函式向被呼叫函式的資料傳送。

1. 形參呼叫時佔據記憶體,呼叫結束後所佔儲存單元被釋放
2. 實參可以是常量,變數,表示式,函式,但進行函式呼叫時必須具有確定的值. 
3. 實參對形參的資料傳送是單向的。 
4 .實參和形參佔用不同的記憶體單元,即使同名也互不影響

#include<stdio.h> 
void fun(int x)// x是形參,在呼叫前不佔記憶體
{
	printf("hello x = %d\n",x); 
} 
int main()
{
	int x = 20;
	fun(x); //y是實參,記憶體中實際存在 
}
/*函式的返回值通過return語句來獲取,當不需要函式返回值時,可省去return語句
return語句的後面可以是變數,也可以是表示式:如 return(a > b)*/ 
#include<stdio.h> 
int fun(int x,int y)//不需要返回值用void 
{
	return(x + y);
	
} 
int main()
{
	int sum = fun(10,20);//型別必須一樣,int型別的函式需定義一個int型別的變數來接受  
	printf("sum = %d\n",sum);
	return 0;
}

函式宣告和定義
函式宣告的作用是把函式名,函式引數的個數和引數型別等資訊告訴編譯器,以便在呼叫時,編譯系統能正確識別並檢查呼叫是否合法
 
格式 : 函式型別 函式名 (引數型別1,引數型別2,···引數型別n);

當一個函式在定義之前被呼叫,編譯系統會在函式呼叫處停止並報錯,函式宣告可以使編譯器“忽略”這個錯誤,繼續下面的程式碼 
 

#include<stdio.h>
double fun(double x,double y);//宣告有fun這個函式 
int main()
{
	double sum = fun(1.2,1.3);//呼叫這個函式 
	//不管裡面有沒有引數都要用(),如fun(); 
	printf("sum = %.2f\n",sum);
	printf("%d",fun(1.2,1.3)); //兩種輸出語句一樣  
	return 0;
}
double fun(double x,double y) 
{
	return (x + y);
}//定義這個函式

2018.7.24

函式的巢狀

函式不允許巢狀定義,但允許巢狀呼叫 。*/ 
#include<stdio.h>
int unfun(int y)
{
	printf("i am unfun y = %d\n", y+1);
	return 0;
 } 
 int fun(int x)
 {
 	unfun(x);//呼叫unfun 
 	printf("i am fun x = %d\n",x);
 	return 0;
 }
 int main()
 {
 	fun(20);//呼叫fun 
 	return 0;
 }

函式遞迴

//計算5的階乘
#include<stdio.h>
int fac(int n)
{
	int t;
	if(1==n||0==n)
	return 1;
	else
	{
		t = n*fac(n-1);
		return t;//返回所需要的值。
	}
 }  
 int main()
 {
 	int f = fac(5);//太大的值會超過int儲存範圍 
 	printf("jc= %d \n",f);
 	return 0;
 }

2018.7.25