c/c++函數和指針

表達能力實在有限,不知道怎麼描述,先寫這兒吧:

void (test)(int a)

{

    printf("Test ~~: %d",a );

}

 

void test1(int a)

{

    printf("Test ~~: %d",a );

}

 

int func(int a)

{

    printf("func %d :" ,a );

    return a;

}

typedef int(*fun)(int);

fun funct(int b)

{

    printf("funcion :%d",b);

    return func;

}

typedef fun(*funt)(int a);

 

typedef fun abc(int a);

 

---------------------------

    test(10000);

    test1(10000);

 

    funt a = funct;

    (a(1))(2);------------------輸出:function 1func 2

    abc *b = funct;

    b(2);-----------------------輸出:function 3

 

 

還不是很清楚c++提供 函數名加括號這種語法的意義,但普遍解釋爲括號調用函數是爲了區別類函數宏;

另外,一個沒有得到驗證的解釋是,extern void (test)(int a); 函數指示符加上括號後,

將發生從函數到指針的轉換,並通過此指針調用函數;

不加括號的話,函數到指針的轉換被抑制,直接通過函數指示符調用函數。

 

另外,關於int func(int a)(int b);這樣的形式應該沒有相應語法,只是編譯器會將

typedef出的函數指針展開,形成這種形式;

eg; typedef fun(*funt)(int a);展開後爲:int (*funt)(int a)(int b);

關於函數參數表後接參數表的形式不知道我確實見過還是隻是編譯結果中出現過,還需要指點;

編譯結果不等於語法;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章