函數參數與函數作爲參數

變量、指針、引用用作函數參數的區別:
(1)變量作函數參數,形參要額外開闢內存,形參和實參佔用不同的內存。

(2)指針類型作函數參數,是將實際參數的地址指針傳給形參,操作效率很高。

void swapint(int *a,int *b)  
{  
int *t;  
t=a;
a=b;
b=t;  
}  


void swapint(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

(3)形參用該類型的引用,就相當於那個變量,也是屬於地址傳遞,效率高。
void swapint(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}


函數作爲參數與函數指針

(1)函數指針的聲明

Note:

*自定義變量名 —— 這種格式一定是函數指針,這個變量可以代表函數

一個函數的名字可以代表這個函數的指針


聲明格式:


返回類型 (*函數指針名稱)(參數類型,參數類型,參數類型,…);
 void (*pfunc) (int, int)



(2)函數指針的使用
函數的名字本身就是該函數的指針


(3)函數作爲參數
方法一:typedef提前定義好函數格式

typedef int (*func) (int,int);
//這樣func就可以代表一類函數;
//使用這個定義
void runfunc(func p,int a, int b)
{
	p(a,b);
}
void add(int a, int b)
{
	cout<<a+b<<endl;
}
//函數作參數
runfunc(add,1,2);


方法二:直接在參數裏定義好函數格式
void runfunc(void (*p)(int,int), int a, int b)
{
	p(a,b);
}
void add(int a, int b)
{
	cout<<a+b<<endl;
}

//函數作參數
runfunc(add,1,2);



方法三:不用指針
void runfunc(void p(int, int),int a, int b)
{
	func(a,b);	
}
void add(int a, int b)
{
	cout<<a+b<<endl;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章