在學(xué)習(xí)arm過(guò)程中發(fā)現(xiàn)這“指針函數(shù)”與“函數(shù)指針”容易搞錯(cuò),最簡(jiǎn)單的辨別方式就是看函數(shù)名前面的指針*號(hào)有沒(méi)有被括號(hào)()包含,如果被包含就是函數(shù)指針,反之則是指針函數(shù)。 今天我們從頭把它搞清楚
首先它們之間的定義:
1、指針函數(shù)是指帶指針的函數(shù),即本質(zhì)是一個(gè)函數(shù),函數(shù)返回類(lèi)型是某一類(lèi)型的指針。 類(lèi)型標(biāo)識(shí)符 *函數(shù)名(參數(shù)表) int *f(x,y);
首先它是一個(gè)函數(shù),只不過(guò)這個(gè)函數(shù)的返回值是一個(gè)地址值。函數(shù)返回值必須用同類(lèi)型的指針變量來(lái)接受,也就是說(shuō),指針函數(shù)一定有函數(shù)返回值,而且,在主調(diào)函數(shù)中,函數(shù)返回值必須賦給同類(lèi)型的指針變量。 表示: float *fun(); float *p; p = fun(a);
來(lái)講詳細(xì)一些吧!請(qǐng)看下面 注意指針函數(shù)與函數(shù)指針表示方法的不同,千萬(wàn)不要混淆。
指針函數(shù): 例如: int *GetDate(); int * aaa(int,int);
函數(shù)返回的是一個(gè)地址值,經(jīng)常使用在返回?cái)?shù)組的某一元素地址上。 1 int * GetDate(int wk,int dy); 2 main() 3 { 4 int wk,dy; 5 do{ 6 printf(Enter week(1-5)day(1-7)\n); 7 scanf(%d%d,&wk,&dy); 8 } 9 while(wk<1||wk>5||dy<1||dy>7); 10 printf(%d\n,*GetDate(wk,dy)); 11 } 12 13 int * GetDate(int wk,int dy) 14 { 15 static int calendar[5][7]= 16 { 17 {1,2,3,4,5,6,7}, 18 {8,9,10,11,12,13,14}, 19 {15,16,17,18,19,20,21}, 20 {22,23,24,25,26,27,28}, 21 {29,30,31,-1} 22 }; 23 return &calendar[wk-1][dy-1]; 24 } 程序應(yīng)該是很好理解的,子函數(shù)返回的是數(shù)組某元素的地址。輸出的是這個(gè)地址里的值。
2、函數(shù)指針是指向函數(shù)的指針變量,即本質(zhì)是一個(gè)指針變量。 int (*f) (int x); /*聲明一個(gè)函數(shù)指針 */ f=func; /* 將func函數(shù)的首地址賦給指針f */ 指向函數(shù)的指針包含了函數(shù)的地址的入口地址,可以通過(guò)它來(lái)調(diào)用函數(shù)。聲明格式如下: void (*fptr)();
把函數(shù)的地址賦值給函數(shù)指針,可以采用下面兩種形式: fptr=&Function; fptr=Function; 取地址運(yùn)算符&不是必需的,因?yàn)閱螁我粋€(gè)函數(shù)標(biāo)識(shí)符就標(biāo)號(hào)表示了它的地址,如果是函數(shù)調(diào)用,還必須包含一個(gè)圓括號(hào)括起來(lái)的參數(shù)表。 x=(*fptr)(); x=fptr(); 第二種格式看上去和函數(shù)調(diào)用無(wú)異。但是有些程序員傾向于使用第一種格式,因?yàn)樗鞔_指出是通過(guò)指針而非函數(shù)名來(lái)調(diào)用函數(shù)的。 下面舉一個(gè)例子: 1 void (*funcp)(); 2 void FileFunc(),EditFunc(); 3 4 main() 5 { 6 funcp=FileFunc; 7 (*funcp)(); 8 funcp=EditFunc; 9 (*funcp)(); 10 } 11 12 void FileFunc() 13 { 14 printf(FileFunc\n); 15 } 16 17 void EditFunc() 18 { 19 printf(EditFunc\n); 20 }
程序輸出為: FileFunc EditFunc
主要的區(qū)別是一個(gè)是指針變量,一個(gè)是函數(shù)。在使用是必要要搞清楚才能正確使用
轉(zhuǎn)自:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html 有整理與刪改
|
|
來(lái)自: 薛董_艾瑞 > 《C語(yǔ)言編程》