筆試經(jīng)驗中我看到了用指針調(diào)用函數(shù)的不同語法形式
一個函數(shù)指針必須用* 操作符(和一對額外的括弧) “轉(zhuǎn)換為” 一個“真正的” 函數(shù)才能調(diào)用:
int r, func(), (*fp)() = func;
r = (*fp)();
而函數(shù)總是通過指針進(jìn)行調(diào)用的, 所有“真正的” 函數(shù)名總是隱式的退化為指針(在表達(dá)式中, 正如在初始化時一樣,
筆試經(jīng)驗中我看到了用指針調(diào)用函數(shù)的`不同語法形式
。參見問題1.14)。這個推論表明無論fp 是函數(shù)名和函數(shù)的指針r = fp();
ANSI C 標(biāo)準(zhǔn)實際上接受后邊的解釋, 這意味著* 操作符不再需要, 盡管依然允許。
拓展:
在學(xué)習(xí)arm過程中發(fā)現(xiàn)這“指針函數(shù)”與“函數(shù)指針”容易搞錯,所以今天,我自己想一次把它搞清楚,找了一些資料,首先它們之間的定義:
1、指針函數(shù)是指帶指針的函數(shù),即本質(zhì)是一個函數(shù)。函數(shù)返回類型是某一類型的指針
類型標(biāo)識符 *函數(shù)名(參數(shù)表)
int *f(x,y);
首先它是一個函數(shù),只不過這個函數(shù)的返回值是一個地址值,
資料共享平臺
《筆試經(jīng)驗中我看到了用指針調(diào)用函數(shù)的不同語法形式》(http://www.ishadingyu.com)。函數(shù)返回值必須用同類型的指針變量來接受,也就是說,指針函數(shù)一定有函數(shù)返回值,而且,在主調(diào)函數(shù)中,函數(shù)返回值必須賦給同類型的指針變量。表示:
float *fun();
float *p;
p = fun(a);
注意指針函數(shù)與函數(shù)指針表示方法的不同,千萬不要混淆。最簡單的辨別方式就是看函數(shù)名前面的指針*號有沒有被括號()包含,如果被包含就是函數(shù)指針,反之則是指針函數(shù)。
來講詳細(xì)一些吧!請看下面
指針函數(shù):
當(dāng)一個函數(shù)聲明其返回值為一個指針時,實際上就是返回一個地址給調(diào)用函數(shù),以用于需要指針或地址的表達(dá)式中。
格式:
類型說明符 * 函數(shù)名(參數(shù))
當(dāng)然了,由于返回的是一個地址,所以類型說明符一般都是int。
例如:int *GetDate();
int * aaa(int,int);
函數(shù)返回的是一個地址值,經(jīng)常使用在返回數(shù)組的某一元素地址上。
【筆試經(jīng)驗中我看到了用指針調(diào)用函數(shù)的不同語法形式】相關(guān)文章:
4.指針運算筆試題
7.指針變量類筆試題