專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

C語言:指針函數(shù)和函數(shù)指針

作者:xuchen   來源:xuchen的blog   點(diǎn)擊數(shù):  更新時間:2014年05月28日   【字體:
1、指針函數(shù):
函數(shù)返回值可以是 int char float等,當(dāng)然也可以是地址值,那么函數(shù)返回值是地址值得函數(shù)就定義為指針函數(shù)。即此函數(shù)的類型為指針類型,就是說改函數(shù)的返回值是指針類型。既然函數(shù)是指針類型那么其返回值必須用相同類型的指針變量來接受了。
如:
int *Add();
int *p;
===> p = Add();(切記 函數(shù)返回的是地址值)
2、函數(shù)指針:
指針變量可以指向變量地址,數(shù)組,字符串,自然也可以指向函數(shù)了。已知每個函數(shù)在編譯的時候,系統(tǒng)會分配給函數(shù)一個入口地址,函數(shù)名表示這個入口地址,定義指向函數(shù)的指針變量稱之為函數(shù)的指針變量。
如:
float fun(int,int);
float (*p)();
p=fun;
用函數(shù)指針變量調(diào)用函數(shù)。形式為:(*函數(shù)指針變量名)(實參表)舉例如下:
int i=5;
char ch ='a';
float fun(int char),(*p)();
p=fun;
(*p)(i,ch);
上面五行程序等價于:
int i=5;
char ch ='a';
float fun(int char);
fun(i,ch);
3、運(yùn)算符的優(yōu)先級("*"VS"[]")
通常在c語言的定義中,運(yùn)算符優(yōu)先級別的高低將會決定不同的含義。例如int *p[4]和int(*p)[4]的區(qū)別。
對于int *p[4],顯然[]的優(yōu)先級高于*,且[]的運(yùn)算方向是自左向右的即與符號左邊的變量“組合”,相反*的運(yùn)算方向是自右向左的即與運(yùn)算符右邊的變量“組合”。那么可以知道int *p[4]首先是一個大小為4的數(shù)組即p[4].然后int *作為補(bǔ)充說明,說明該數(shù)組的每一個元素是指向整型類型的指針。
而int(*p)[4]中,()和[]運(yùn)算級別相同,但考慮自左向右可以知道int(*p)[4]首先是一個指針,然后該指針p指向一個長度為4的整型數(shù)組。
關(guān)閉窗口

相關(guān)文章