函式指標(返回值為指標的函式) 指標函式
注意指標函式與函式指標表示方法的不同,千萬不要混淆。最簡單的辨別方式就是看函式名前面的指標*號有沒有被括號()包含,如果被包含就是函式指標,反之則是指標函式。
來講詳細一些吧!請看下面
主要的區別是乙個是函式,乙個是指標變數。在使用是必要要搞清楚才能正確使用
指標函式:
當乙個函式宣告其返回值為乙個指標時,實際上就是返回乙個位址給呼叫函式,以用於需要指標或位址的表示式中,
就是返回型別為指標型別
。格式:
型別說明符 * 函式名(引數)
當然了,由於返回的是乙個位址,所以型別說明符一般都是int。
例如:int *getdate();
int * aaa(int,int);
函式返回的是乙個位址值,經常使用在返回陣列的某一元素位址上。
int * getdate(int wk,int dy);
main()
while(wk<1||wk>5||dy<1||dy>7);
printf(%d\n,*getdate(wk,dy));
}int * getdate(int wk,int dy),,
,,};return &calendar[wk-1][dy-1];
}程式應該是很好理解的,子函式返回的是陣列某元素的位址。輸出的是這個位址裡的值。
函式指標是指向函式的指標變數,即本質是乙個指標變數。
int (*f) (int x); /* 宣告乙個函式指標 */
f=func;/* 將func函式的首位址賦給指標f */
型別說明符 (*函式名1)(引數)
使用:函式名1=函式名2
函式名1(引數)
其實這裡不能稱為函式名,應該叫做指標的變數名。這個特殊的指標指向乙個返回整型值的函式。指標的宣告和它指向函式的宣告保持一致。
指標名和指標運算子外面的括號改變了預設的運算子優先順序。如果沒有圓括號,就變成了乙個返回整型指標的函式的原型宣告。
例如:void (*fptr)();
fptr=&function;
fptr=function;
取位址運算子&不是必需的,因為單單乙個函式識別符號就標號表示了它的位址,如果是函式呼叫,還必須包含乙個圓括號括起來的參數列。
可以採用如下兩種方式來通過指標呼叫函式:
x=(*fptr)();
x=fptr();
第二種格式看上去和函式呼叫無異。但是有些程式設計師傾向於使用第一種格式,因為它明確指出是通過指標而非函式名來呼叫函式的。下面舉乙個例子:
void (*funcp)();
void filefunc(),editfunc();
main()
void filefunc()
void editfunc()
程式輸出為:
filefunc
editfunc
主要的區別是乙個是指標變數,乙個是函式。在使用是必要要搞清楚才能正確使用
C語言函式返回值為指標和函式返回值為void
有時遇到函式返回值為空和函式返回值為指標的情況下,需要在前面定義該函式 函式的返回值為指標也必須在此定義,函式的返回值為void必須在此定義,返回值是整形或者其他基本型別不需要在此定義 函式功能 把格式化的資料寫入某個字串 函式原型 int sprintf char buffer,const cha...
函式返回值為指標型別
char getstring void void main void 在函式getstring 中定義的變數p屬於local 區域性變數 當函式結束時自動消失,所以在返回時,根本就得不到p所指的內容。解決辦法有以下幾種 可能還有很多方法,不過這裡只是最常見的幾中,也是最能體表現程式中記憶體使用的情況...
返回值為函式指標的示例
include include double getmin double dbdata,int isize 求最小值 return dbmin double getmax double dbdata,int isize 求最大值 double dbmax int i assert isize 0 d...