1樓:d41d8c
p1(NULL)
只要能看出p1只接受乙個函式指標就行。
函式指標要麼指向乙個函式,要麼為空指標。而fun只有乙個引數,沒法憑空變出乙個函式。所以傳空指標就行了,也只能傳空指標。
p2、p3兩個名字在函式體根本用不了:不是強行忽略,而是它們只有函式原型作用域(function prototype scope),出了引數宣告就不可見了。
2樓:冷靜下來
感謝各位熱心作答,不過題目想知道的是這個已經定義好的函式引數在函式體裡面該用什麼樣的語法來操作,辛辛苦苦傳了乙個奇葩引數進來,得好好用用它吧。而不是怎樣去閱讀理解定義這類引數
3樓:裴浩
原來就是個求個用法啊,傳個函式指標不就完了。函式引數是p1,p2和p3沒有意義。
#include
void g_p3()
void g_p2(void (*f)())
void g_p1(void (*f)(voidprintf("g_p1\n");
f(g_p3);
}void fun(void (*p1)(void(*p2)(void (*p3printf("func\n");
p1(g_p2);
}int main()
列印結果是
func
g_p1
g_p2
g_p3
雖然是個沒什麼意義的例子,比如函式A的乙個引數是函式B,如果函式B需要接收引數,那麼一般要給函式A多傳幾個引數給函式B呼叫,否則函式B接收的引數就只能是全域性的。
void call_unary_func(void (*f)(int), int x)
比如上述用法,引數是int,如果沒有int x這個引數,那麼如果要使用f,就只能傳入全域性的int。再就像訊號註冊函式
void (*signal(int signum, void(*handler)(int)))(int);
傳入的函式指標是void(*)(int),接收1個引數,也指定了對應的訊號。
從外向裡一層一層剝掉括號
1. 函式指標fun,返回void,引數只有1個,即
void (*p1)(void (*p2)(void (*p3)()))
2. 函式指標p1,返回void,引數只有1個,即
void (*p2)(void (*p3)())
3. 函式指標p2,返回void,引數只有1個,即
void (*p3)()
4. 函式指標p3,返回void,無引數
完畢。這個還算簡單,畢竟返回型別全是普通型別,如果返回函式或陣列,看起來更不直觀。比如
int* (*(*)(int* (*(*)(int))(int, int)))(int, int)
也就是3層
4樓:
既然題主強調是不清楚怎樣解引用,更新一下:
typedef void (*FunctionType3)();
typedef void (*FunctionType2)(FunctionType3 p3);
typedef void (*FunctionType1)(FunctionType2 p2);
void f2(FunctionType3 p3); // f2在某處定義
void fun (FunctionType1 p1) {
p1(f2); //就這樣解引用。
以上型別和引數的命名跟你給出的順序保持了一致。但是,你如果把123的順序顛倒過來,就能看出這種定義可以一直進行下去,到第n階都沒關係。因此懂一階兩階,就懂了三階直到n階。
指向函式的指標與指向類的非靜態函式指標有什麼不同?
BlueWanderer 假設類A有乙個成員x,然後我有乙個也叫x的成員指標指向A的乙個成員函式y,然後我有乙個A的例項a。於是,如果使用成員指標不需要.而是直接用.的話.我怎麼明確a.x是想呼叫成員函式y,而不是訪問原本的那個x?當然的確有辦法,只是遠沒有.好用 Aman 首先說 C 語言,假設有...
C 中如何定義指向函式指標的指標?
zr scat 瀉藥先定義乙個函式指標 typedef void pfn void 再定義指向函式指標的指標 void print void pfn func print pfn ptr func 在c 11下,可以這麼偷懶獲得型別 1 include 23using namespace std 4...
您的操作需要先登入才能繼續 類似這樣的互動怎麼設計才能讓使用者感覺最好?
以BBS為例,國內超過80 的BBS在瀏覽的範圍下較為開放,對於隱藏和帶有附件的帖子或文章則較為封閉,論壇的推廣過程中,註冊會員是乙個重要指標,但活躍使用者的數量應該更能夠影響論壇的質量,以學生群體為例,獲取資訊是乙個及時性過程,個體每天能夠持續關注的論壇數目也就不超過20個,大部分的論壇採用註冊的...