2014-12-05 128 views
1

我正處於學習C語言的初始階段。我對包括空指針在內的聲明有一個疑問。無效指針結構

void (*myvar)(const struct foo *); 

任何人都可以請幫我關於上述行。上面一行的確切含義是什麼,以及如何在代碼中使用這個指針。

+6

'struct char'是一個錯誤。 – 2014-12-05 10:31:16

+0

這是一個函數指針,其中1)函數返回void,2)唯一的參數是const。但是,類型const struct char *可能無效 – user3629249 2014-12-05 10:59:28

回答

6

在你的問題,

void (*myvar)(const struct charpp *);按照注

是一個函數指針,而不是一個簡單的pointer -to -struct。你可以找到更多關於這個here的信息。

另外,請檢查this答案,以清楚地瞭解使用情況。

注意:char是c中的保留關鍵字[datatype]。它不能用作變量名稱,就像你在代碼中使用的那樣。改變一下別的。

+0

感謝您的回覆! – user1138143 2014-12-05 10:35:11

+0

@ user1138143最受歡迎。 :-) – 2014-12-05 10:35:39

+0

@Gopi你看完我的完整答案了嗎?包括註釋? – 2014-12-05 10:44:32

2

應該可變聲明的指針的一個函數採取const char *作爲參數,不返回任何值。我說應該,因爲你在參數類型的聲明中有錯誤(沒有這樣的東西,如const struct char *)。

如果修復錯誤,並假設你的意思const char *,那麼你可以使用它像下面的代碼:

#include <stdio.h> 

void my_print_line(const char *str) 
{ 
    printf("%s\n", str); 
} 

int main(void) 
{ 
    void (*myvar)(const char *); 

    myvar = &my_print_line; 

    myvar("Hello world!"); 
} 
+0

感謝您的回覆!我明白struct char是無效的。我試圖給出一些var名字,但我的錯誤給了字符。正確的一個:void(* myvar)(const struct foo *); – user1138143 2014-12-05 11:43:31

2

這是一個指向函數的指針。如果您遵循Spiral Rule,則可以輕鬆打破並理解規則。看看Example2。現在你可以很容易地,把你的聲明,而不是示例,並打破它的一部分,以獲得更好的理解。

   +--------------------+ 
      | +---+    | 
      | |+-+|    | 
      | |^ ||    | 
     char *(*fp)(int, float *); 
     ^^^ ||    | 
     | | +--+|    | 
     | +-----+    | 
     +------------------------+ 

此外,struct char將產生一個錯誤。

+0

感謝您的回覆! – user1138143 2014-12-05 11:47:57