C/C++函數指標聲明,函數指標聲明

來源:互聯網
上載者:User

C/C++函數指標聲明,函數指標聲明

前天看APUE,看到signal的聲明居然是

void (*signal(int,void(*)(int)))(int);


初看以下,還真是看不出這是啥意思。道行太淺,只能看到這種函數指標
void *(*func)(int,void(*)(int));


書中說先typedef以下就能看清楚這個指標
typedef void Signfunc(int);
Signfunc *signal(int,Sigfunc *);
這樣寫的確變清晰了,可是搞不懂為啥應該是這麼分析,為啥它不寫成
(void (int))(*signal)(int,void(*)(int));
這麼寫不是更能看懂,然後我放到gcc裡面編譯,它說
error: expected identifier or ‘(’ before ‘void’
 (void (int))(*signal)(int,void(*)(int));
改了一下,又說:
error: expected identifier or ‘(’ before ‘int’
 void (int)(*signal)(int x,void(*func)(int))
 error: ‘signal’ declared as function returning a function
 void (*signal)(int,void(*)(int))(int);
error: ‘signal’ declared as function returning a function
 void ((*signal)(int,void(*)(int)))(int);
看來它只認這種,真不知老美怎麼想的,搞得這麼難認。


看來只能用這種規則套了:


如果函數返回的不是函數指標,那麼這個函數指標可以定義為如下形式:


test的返回值 ( *test)(test的型參);
如果返回的是函數指標,我們要寫成:


返回函數的返回值 (*test(test的參數))(返回函數的型參);


然後可以組合成各種恐怖的函式宣告


void (*((*signal(int,void(*)(int)))(int,void(*)(int)))(int,void(*)(int));
就是一個函數指標A,它返回的是一個函數指標B,這個B函數是一個返回函數C值針的函數。把複雜的參數先去掉,變成這樣
void (*((*signal(int))(int))(int);


#include <stdio.h>void (*((*signal(int))(int)))(int);void (*fun(int))(int);void test(int);int main(int c, char ** v){signal(323);return 0;}void (*((*signal(int x))(int)))(int){printf("num:%d",x);return fun;}void (*fun(int y))(int){return test;}void test(int x){printf("fuck C function pointer!!!,%d",x);}


我們還可以繼續
就是一個函數指標A,它返回的是一個函數指標B,這個B函數是一個返回函數C值針的函數,而函數C就是一個返回函數D指標的函數。。。。。。

個人部落格地址:http://www.flakor.cn


C語言怎聲明一個返回函數指標的函數?

typedef int (*AA)();
AA function();
 
C語言的問題:怎申明一個指向任意類型函數的指標?

定義成什麼指標都無所謂,裡面都可以強制轉換。
關鍵是傳進去的函數的參數應該不能是任意的吧。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.