/*
站在用戶的角度思考問題,與客戶深入溝通,找到黃巖網站設計與黃巖網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網站、網站建設、企業(yè)官網、英文網站、手機端網站、網站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務覆蓋黃巖地區(qū)。
函數(shù)指針,關鍵是后面兩個字“指針”,顧名思義,是一個指向函數(shù)的指針
原理:函數(shù)在創(chuàng)建好了后,函數(shù)的代碼會在內存中占有個位置,這時我們創(chuàng)造一個指針來指向這個地址,這個指針就叫函數(shù)指針
函數(shù)指針不可以移動,想要移動指針的位置來指向函數(shù)的下一個指令的想法是錯誤的
函數(shù)指針的要求,
1,首先這個指針,要和函數(shù)的返回類型一樣
2,指針的*和名字,要用小括號括起來//不括起來就是指針函數(shù)了,意思就變成,函數(shù)返回一個指針了
3,最右邊的小括號里形參位置的類型,形參的個數(shù),也要和函數(shù)定義時的形參一致,只要類型,不要形參名即可,
但是加上形參名也可以,沒毛病,看上去也更清晰
*/
#include
void swapchar(char *a, char *b)
{
char t;
t = *a;
*a = *b;
*b = t;
}
void swapchar2(char * a2, char * b2)
{
printf("this is swapchar2");
}
int main(void)
{
char chf = 'a', chg = 'j';
void(*p)(char * a, char * b);//定義函數(shù)指針、形參名字a、b可有可無,但有的話看上去更清晰,只要函數(shù)定義的類型、參數(shù)類型、以及參數(shù)個數(shù),與這個指針一致,那么這個指針p,就可以指向它
p = swapchar;//p指針接管swapchar函數(shù),只要給函數(shù)名字,就可以給過去了
printf("chf=%c,chg=%c ", chf, chg);
p(chf, chg);
printf("chf=%c,chg=%c ", chf, chg);
p = swapchar2;//這里把swapchar2函數(shù)的地址,給了p,這時p從swapchar地址,轉移到了swapchar2這里。
p(chf,chg);
return 0;
}
01
指針函數(shù)通常是指函數(shù)返回值是指針的一類函數(shù),如圖所示。
02
函數(shù)指針是指指向某個具體函數(shù)的指針變量,在程序設計時可以用來調用某個特定函數(shù)或者做某個函數(shù)的參數(shù)。其形式一般如圖:
03
指針函數(shù)與函數(shù)指針本質上的區(qū)別是,指針函數(shù)是一個帶指針的函數(shù),總的來說還是一個函數(shù),如圖就是一個帶*name指針的函數(shù)
04
函數(shù)指針是指向函數(shù)的指針變量,本質上還是一個指針,其格式如下,可以看到和指針函數(shù)的格式非常像,所以一定要用心留意。
函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。
int func(int x); /* 聲明一個函數(shù) */
int (*f) (int x); /* 聲明一個函數(shù)指針 */
f=func; /* 將func函數(shù)的首地址賦給指針f */
賦值時函數(shù)func不帶括號,也不帶參數(shù),由于func代表函數(shù)的首地址,因此經過賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。
注2:函數(shù)括號中的形參可有可無,視情況而定。
下面的程序說明了函數(shù)指針調用函數(shù)的方法:
例一、
#includestdio.h
int max(int x,int y){ return(xy?x:y); }
void main()
{
int (*ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d%d",a,b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函數(shù)的指針變量,所以可把函數(shù)max()賦給ptr作為ptr的值,即把max()的入口地址賦給ptr,以后就可以用ptr來調用該函數(shù),實際上ptr和max都指向同一個入口地址,不同就是ptr是一個指針變量,不像函數(shù)名稱那樣是死的,它可以指向任何函數(shù),就看你想怎么做了。在程序中把哪個函數(shù)的地址賦給它,它就指向哪個函數(shù)。而后用指針變量調用它,因此可以先后指向不同的函數(shù)。不過注意,指向函數(shù)的指針變量沒有++和--運算,用時要小心。
指針函數(shù)是指返回值是指針的函數(shù),即本質是一個函數(shù)。我們知道函數(shù)都有返回類型(如果不返回值,則為無值型),只不過指針函數(shù)返回類型是某一類型的指針。
其定義格式如下所示:
返回類型標識符*返回名稱(形式參數(shù)表)
{ 函數(shù)體}
返回類型可以是任何基本類型和復合類型。返回指針的函數(shù)的用途十分廣泛。事實上,每一個函數(shù),即使它不帶有返回某種類型的指針,它本身都有一個入口地址,該地址相當于一個指針。比如函數(shù)返回一個整型值,實際上也相當于返回一個指針變量的值,不過這時的變量是函數(shù)本身而已,而整個函數(shù)相當于一個“變量”。
其實還是指針,只是指向的內容和聲明方法不同而已
函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。
函數(shù)指針有兩個用途:調用函數(shù)和做函數(shù)的參數(shù)。
函數(shù)指針的聲明方法為:
返回值類型 ( *?指針變量名) ([形參列表]);
如:
int func(int x); /* 聲明一個函數(shù) */
int (*f) (int x); /* 聲明一個函數(shù)指針 */
f=func; /* 將func函數(shù)的首地址賦給指針f */
或者使用下面的方法將函數(shù)地址賦給函數(shù)指針:
f = func;
賦值時函數(shù)func不帶括號,也不帶參數(shù),由于func代表函數(shù)的首地址,因此經過賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。
下面的程序說明了函數(shù)指針調用函數(shù)的方法:
#includestdio.h
int?max(int?x,int?y){return?(xy??x:y);}
int?main()
{
int?(*ptr)(int,?int);
int?a,?b,?c;
ptr?=?max;
scanf("%d%d",?a,?b);
c?=?(*ptr)(a,b);
printf("a=%d,?b=%d,?max=%d",?a,?b,?c);
return?0;
}
本文題目:函數(shù)指針的表達方式c語言 c語言函數(shù)指針怎么用
本文來源:http://muchs.cn/article14/doecdde.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網頁設計公司、網站改版、營銷型網站建設、、網站制作、商城網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)