关于函数指针
其實(shí)關(guān)于 函數(shù)指針 這個(gè)概念,之前早就搞清楚了,實(shí)際中也用過(guò),只不過(guò)用的不多,會(huì)生疏,明確的表達(dá)形式經(jīng)常會(huì)忘掉,我這人記性不是很好。特轉(zhuǎn)載一篇以前看過(guò)的文章(這篇文章也到處被轉(zhuǎn)載,條理還算清楚,被我多轉(zhuǎn)一次也無(wú)妨了),以備忘。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
指針函數(shù)和函數(shù)指針有什么區(qū)別
這兩個(gè)概念都是簡(jiǎn)稱(chēng),
1 指針函數(shù)是指帶指針的函數(shù),即本質(zhì)是一個(gè)函數(shù)。我們知道函數(shù)都又返回類(lèi)型(如果不返回值,則為無(wú)值型),只不過(guò)指針函數(shù)返回類(lèi)型是某一類(lèi)型的指針。其定義格式如下所示:
返回類(lèi)型標(biāo)識(shí)符 *返回名稱(chēng)(形式參數(shù)表)
{ 函數(shù)體 }
返 回類(lèi)型可以是任何基本類(lèi)型和復(fù)合類(lèi)型。返回指針的函數(shù)的用途十分廣泛。事實(shí)上,每一個(gè)函數(shù),即使它不帶有返回某種類(lèi)型的指針,它本身都有一個(gè)入口地址,該 地址相當(dāng)于一個(gè)指針。比如函數(shù)返回一個(gè)整型值,實(shí)際上也相當(dāng)于返回一個(gè)指針變量的值,不過(guò)這時(shí)的變量是函數(shù)本身而已,而整個(gè)函數(shù)相當(dāng)于一個(gè)“變量”。例如 下面一個(gè)返回指針函數(shù)的例子:
#include
float *find();
main()
{
????static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};
????float *p;
????int i,m;
????printf("Enter the number to be found:");
????scanf("%d",&m);
????printf("the score of NO.%d are:\n",m);
????p=find(score,m);
????for(i=0;i<4;i++)
????????printf("%5.2f\t",*(p+i));
}
float *find(float(*pionter)[4],int n)/*定義指針函數(shù)*/
{
????float *pt;
????pt=*(pionter+n);
????return(pt);
}
學(xué) 生學(xué)號(hào)從0號(hào)算起,函數(shù)find()被定義為指針函數(shù),起形參pointer是指針指向包含4個(gè)元素的一維數(shù)組的指針變量。pointer+1指向 score的第一行。*(pointer+1)指向第一行的第0個(gè)元素。pt是一個(gè)指針變量,它指向浮點(diǎn)型變量。main()函數(shù)中調(diào)用find()函 數(shù),將score數(shù)組的首地址傳給pointer.
2,“函數(shù)指針”是指向函數(shù)的指針變量,因而“函數(shù)指針”本身首先應(yīng)是指針變量, 只不過(guò)該指針變量指向函數(shù)。
這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。如前所述,C在編譯時(shí),每一個(gè)函數(shù)都有一個(gè)入口地址,該 入口地址就是函數(shù)指針?biāo)赶虻牡刂贰S辛酥赶蚝瘮?shù)的指針變量后,可用該指針變量調(diào)用函數(shù),就如同用指針變量可引用其他類(lèi)型變量一樣,在這些概念上一致的。
函數(shù)指針有兩個(gè)用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。
函數(shù)指針的說(shuō)明方法為:
???????? 數(shù)據(jù)類(lèi)型標(biāo)志符 (*指針變量名)(參數(shù));
???? 注:函數(shù)括號(hào)中的參數(shù)可有可無(wú),視情況而定。
下面的程序說(shuō)明了函數(shù)指針調(diào)用函數(shù)的方法:
#include
int max(int x,int y){ return(x>y?x:y); }
void main()
{
????int (*ptr)();
????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來(lái)調(diào)用該函數(shù),實(shí)際上 ptr和max都指向同一個(gè)入口地址,不同就是ptr是一個(gè)指針變量,不像函數(shù)名稱(chēng)那樣是死的,它可以指向任何函數(shù),就看你像怎么做了。在程序中把哪個(gè)函 數(shù)的地址賦給它,它就指向哪個(gè)函數(shù)。而后用指針變量調(diào)用它,因此可以先后指向不同的函數(shù),不過(guò)注意,指向函數(shù)的指針變量沒(méi)有++和--運(yùn)算,用時(shí)要小心。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
指針函數(shù)和函數(shù)指針有什么區(qū)別
這兩個(gè)概念都是簡(jiǎn)稱(chēng),
1 指針函數(shù)是指帶指針的函數(shù),即本質(zhì)是一個(gè)函數(shù)。我們知道函數(shù)都又返回類(lèi)型(如果不返回值,則為無(wú)值型),只不過(guò)指針函數(shù)返回類(lèi)型是某一類(lèi)型的指針。其定義格式如下所示:
返回類(lèi)型標(biāo)識(shí)符 *返回名稱(chēng)(形式參數(shù)表)
{ 函數(shù)體 }
返 回類(lèi)型可以是任何基本類(lèi)型和復(fù)合類(lèi)型。返回指針的函數(shù)的用途十分廣泛。事實(shí)上,每一個(gè)函數(shù),即使它不帶有返回某種類(lèi)型的指針,它本身都有一個(gè)入口地址,該 地址相當(dāng)于一個(gè)指針。比如函數(shù)返回一個(gè)整型值,實(shí)際上也相當(dāng)于返回一個(gè)指針變量的值,不過(guò)這時(shí)的變量是函數(shù)本身而已,而整個(gè)函數(shù)相當(dāng)于一個(gè)“變量”。例如 下面一個(gè)返回指針函數(shù)的例子:
#include
float *find();
main()
{
????static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};
????float *p;
????int i,m;
????printf("Enter the number to be found:");
????scanf("%d",&m);
????printf("the score of NO.%d are:\n",m);
????p=find(score,m);
????for(i=0;i<4;i++)
????????printf("%5.2f\t",*(p+i));
}
float *find(float(*pionter)[4],int n)/*定義指針函數(shù)*/
{
????float *pt;
????pt=*(pionter+n);
????return(pt);
}
學(xué) 生學(xué)號(hào)從0號(hào)算起,函數(shù)find()被定義為指針函數(shù),起形參pointer是指針指向包含4個(gè)元素的一維數(shù)組的指針變量。pointer+1指向 score的第一行。*(pointer+1)指向第一行的第0個(gè)元素。pt是一個(gè)指針變量,它指向浮點(diǎn)型變量。main()函數(shù)中調(diào)用find()函 數(shù),將score數(shù)組的首地址傳給pointer.
2,“函數(shù)指針”是指向函數(shù)的指針變量,因而“函數(shù)指針”本身首先應(yīng)是指針變量, 只不過(guò)該指針變量指向函數(shù)。
這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。如前所述,C在編譯時(shí),每一個(gè)函數(shù)都有一個(gè)入口地址,該 入口地址就是函數(shù)指針?biāo)赶虻牡刂贰S辛酥赶蚝瘮?shù)的指針變量后,可用該指針變量調(diào)用函數(shù),就如同用指針變量可引用其他類(lèi)型變量一樣,在這些概念上一致的。
函數(shù)指針有兩個(gè)用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。
函數(shù)指針的說(shuō)明方法為:
???????? 數(shù)據(jù)類(lèi)型標(biāo)志符 (*指針變量名)(參數(shù));
???? 注:函數(shù)括號(hào)中的參數(shù)可有可無(wú),視情況而定。
下面的程序說(shuō)明了函數(shù)指針調(diào)用函數(shù)的方法:
#include
int max(int x,int y){ return(x>y?x:y); }
void main()
{
????int (*ptr)();
????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來(lái)調(diào)用該函數(shù),實(shí)際上 ptr和max都指向同一個(gè)入口地址,不同就是ptr是一個(gè)指針變量,不像函數(shù)名稱(chēng)那樣是死的,它可以指向任何函數(shù),就看你像怎么做了。在程序中把哪個(gè)函 數(shù)的地址賦給它,它就指向哪個(gè)函數(shù)。而后用指針變量調(diào)用它,因此可以先后指向不同的函數(shù),不過(guò)注意,指向函數(shù)的指針變量沒(méi)有++和--運(yùn)算,用時(shí)要小心。
總結(jié)
- 上一篇: 三星Galaxy S23系列先行者计划开
- 下一篇: 关于printf输出 格式化规定符 的