2015-10-06 90 views
2

我有這樣的C代碼(通過測試的啓發)關於類型,c中的int(*)(int)是什麼意思?

#include <stdio.h> 

int foo (int n) 
{ 
    static int s = 0; 
    return s += n; 
} 

int main() 
{ 
    int y; 
    int i; 

    for (i=0; i<5; i++) { 
     y= foo(i); 
    } 

    printf("%d\n", foo); 

    return 0; 
} 

,我在foo價值和什麼類型具有特別感興趣。編譯器給我這個警告

test.c:18:16: warning: format specifies type 'int' but the argument has type 
     'int (*)(int)' [-Wformat] 

但我不確定這意味着什麼。什麼是int (*)(int)以及如何調用沒有參數的函數名稱給我這種類型的東西?

+0

如果你想獲得'foo'的值,可以使用'printf(「%p」,(void *)foo);',但不能保證標準。對於該類型,請參閱[this](http://cdecl.ridiculousfish.com/?q=int+%28*foo%29%28int%29) –

回答

10

如果沒有函數調用,foo會計算一個指向函數的指針,該函數需要使用int並返回int。這是int (*)(int)的長描述。

0

您未撥打foo。要撥打foo,請在名稱後面加上(argument)。因爲它是地址foo,它的類型是int (*)(int)(指向函數的指針取一個整數參數並返回一個int)並將其發送到printf

printf然後抱怨,因爲你試圖告訴它打印一個int,但給它一個函數指針。

相關問題