給你舉個(gè)例子吧,這樣就容易理解得多。
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、雨花網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開發(fā)、雨花網(wǎng)絡(luò)營銷、雨花企業(yè)策劃、雨花品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供雨花建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:chinadenli.net
例子:設(shè)計(jì)一個(gè)函數(shù)func();在調(diào)用它時(shí)每次實(shí)現(xiàn)不同的函數(shù)功能,輸入兩個(gè)參數(shù)a和b,第一次調(diào)用func()時(shí)找出a和b中的較大者,第二次調(diào)用找出較小者,第三次調(diào)用求a和b之和。
說明:格式
(*p)()
表示定義一個(gè)指向函數(shù)的指針變量p,在c語言中這個(gè)格式是固定的,前面的()表示p先和*結(jié)合,是指針變量,后面的()表示p指向一個(gè)函數(shù)。前面的()不能省略,如果寫成
*p(),由于()優(yōu)先級(jí)比*高,那就表示p()函數(shù)返回的是一個(gè)指針,p本身就是函數(shù)不是指針了,意思完全變了。
任何一個(gè)函數(shù),函數(shù)名就是該函數(shù)的入口地址(起始地址),也就是說函數(shù)名就是個(gè)地址,從這個(gè)地址開始,函數(shù)占用一段內(nèi)存單元。因此可以用一個(gè)指針變量來指向這個(gè)這個(gè)函數(shù)名,這樣就相當(dāng)于指向這個(gè)函數(shù)了。所以下面的max,min,add函數(shù)都是一個(gè)地址,分別調(diào)用時(shí)就是賦值p=max,p=min,p=add,也就是(*p)(x,y)分別就等于max(x,y),min(x,y),add(x,y).
程序在win-tc和Dev-c++下調(diào)試通過。
#include
stdio.h
#include
conio.h
int
max(int
x,int
y)
{
return(xy?x:y);
}
int
min(int
x,int
y)
{
return(xy?x:y);
}
int
add(int
x,int
y)
{
return(x+y);
}
int
func(int
x,int
y,int
(*p)())
/*定義指向函數(shù)的指針變量p,關(guān)鍵1*/
{int
result;
result=(*p)(x,y);
/*調(diào)用相應(yīng)函數(shù),函數(shù)名即地址給p,這樣p指向該函數(shù),關(guān)鍵2*/
printf("%d\n",result);
}
main()
{
int
a,b;
printf("Please
input
two
integers
a
and
b:\n");
scanf("%d%d",a,b);
printf("max=");
func(a,b,max);/*相當(dāng)于賦值p=max*/
printf("min=");
func(a,b,min);/*相當(dāng)于賦值p=min*/
printf("add=");
func(a,b,add);/*相當(dāng)于賦值p=add*/
getch();
}
樓主已經(jīng)開始想要知道如何用函數(shù)指針了,不錯(cuò),好學(xué)生,給你個(gè)例子
#include stdio.h
int ff(int(*p)(int,int),int a,int b)//原始寫法,閱讀不便
{
return p(a,b);
}
typedef int(*Pfun)(int,int);//定義函數(shù)指針類型,同時(shí)申明了原型 返回int 兩個(gè)int形參
int f(Pfun p,int a,int b) //改進(jìn)寫法 易懂
{
return p(a,b);
}
int add(int a,int b)
{
printf("加法函數(shù)add被調(diào)用:");
return a+b;
}
int sub(int a,int b)
{
printf("減法函數(shù)sub被調(diào)用:");
return a-b;
}
void main()
{//函數(shù)指針初步應(yīng)用
int a=1,b=2;
printf(" %d+%d=%d\n",a,b,f(add,a,b));
printf(" %d-%d=%d\n",a,b,f(sub,a,b));
printf(" %d+%d=%d\n",a,b,ff(add,a,b));
printf(" %d-%d=%d\n",a,b,ff(sub,a,b));
}
///////////運(yùn)行結(jié)果:
加法函數(shù)add被調(diào)用: 1+2=3
減法函數(shù)sub被調(diào)用: 1-2=-1
加法函數(shù)add被調(diào)用: 1+2=3
減法函數(shù)sub被調(diào)用: 1-2=-1
給個(gè)程序自己參考,下面程序運(yùn)行時(shí)你輸入一個(gè)文件名, 它會(huì)打開此文件,并寫入0-99個(gè)數(shù)字。
#include stdio.h
void foo(const char *filename)
{
int i;
FILE *fp = fopen(filename, "w+");
for (i = 0; i 100; i++)
fprintf(fp,"%d ", i);
fclose(fp);
}
void main()
{
char str[128];
scanf("%s", str);
foo(str);
}
形參:全稱為“形式參數(shù)”是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù),目的是用來接收調(diào)用該函數(shù)時(shí)傳遞的參數(shù)。
形參的作用是實(shí)現(xiàn)主調(diào)函數(shù)與被調(diào)函數(shù)之間的聯(lián)系,通常將函數(shù)所處理的數(shù)據(jù),影響函數(shù)功能的因素或者函數(shù)處理的結(jié)果作為形參。
實(shí)參:全稱為"實(shí)際參數(shù)"是在調(diào)用時(shí)傳遞給函數(shù)的參數(shù),即傳遞給被調(diào)用函數(shù)的值。
實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等, 無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應(yīng)預(yù)先用賦值,輸入等辦法使實(shí)參獲得確定值。
擴(kuò)展資料:
形參和實(shí)參的特點(diǎn):
1、形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)用函數(shù)后則不能再使用該形參變量。
2、實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等,無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值,輸入等辦法使參數(shù)獲得確定值。
3、實(shí)參和形參在數(shù)量上,類型上、順序上應(yīng)嚴(yán)格一致,否則就會(huì)發(fā)生類型不匹配的錯(cuò)誤。
4、在一般傳值調(diào)用的機(jī)制中只能把實(shí)參傳送給形參,而不能把形參的值反向地傳送給實(shí)參。因此在函數(shù)調(diào)用過程中,形參值發(fā)生改變,而實(shí)參中的值不會(huì)變化。而在引用調(diào)用的機(jī)制當(dāng)中是將實(shí)參引用的地址傳遞給了形參,所以任何發(fā)生在形參上的改變實(shí)際上也發(fā)生在實(shí)參變量上。
參考資料來源:百度百科-形參
參考資料來源:百度百科-實(shí)參
主函數(shù)的實(shí)參是由操作系統(tǒng)傳遞的。
c++規(guī)定的主函數(shù)標(biāo)準(zhǔn)格式(c語言未具體規(guī)定):int
main(int
argc,
char
*argv[])
其中int
argc
表示操作系統(tǒng)傳遞給程序的參數(shù)個(gè)數(shù),char
*argv[]
存儲(chǔ)各個(gè)參數(shù)。
例如:
若有程序如下:
int
main(int
argc,
char
*argv[])
{
int
i;
printf("您輸入了
%d
個(gè)參數(shù)\n分別是:",argc);
for(i=0;i
運(yùn)行-
cmd
-
輸入
c:\app.exe
hello
world!
回車
執(zhí)行結(jié)果將是:
您輸入了
3
個(gè)參數(shù)
分別是:c:\app.exe
hello
world!
"
注意,第一個(gè)參數(shù)值將是你程序的文件名。
#include stdio.h
int max(int a,int b)
{
return ab? a: b;
}
int min(int a,int b)
{
return ab? a: b;
}
int fun(int x,int y,int f(int,int))
{
int result;
result=f(x,y);
printf("%d\n",result);
}
int main(int argc, char *argv[])
{
int n=1, a=3, b=5;
if(n==1)
{fun(a,b,max);}
else{fun(a,b,min);} //==== 這兒不能寫成else括號(hào) "else(n==2) fun(a,b,min);"
return 0;
}
文章名稱:c語言用函數(shù)名做形參,c語言函數(shù)中數(shù)組名可以做形參嘛
當(dāng)前地址:http://chinadenli.net/article14/hesgde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、響應(yīng)式網(wǎng)站、微信公眾號(hào)、網(wǎng)站維護(hù)、微信小程序、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)