2013-01-19 72 views
1

我想做一個程序,其中函數被指針指向。它如下: -在C:使用void和int關鍵字,同時指向函數

這是第一個使用「無效」返回類型的程序。

#include<stdio.h> 
#include<conio.h> 
void CharPrint(char *ptr); 
main() 
{ 
    char *str="Hello World"; 
    void (*ptr1)(char *ptr); 
    ptr1=CharPrint; 
    if((*ptr1)(str)) 
     printf("Done"); 
    return 0; 
} 
void CharPrint(char *ptr) 
{ 
    printf("%s\n",ptr); 
} 

它引發了很多錯誤。它們是: -

enter image description here

第二個程序如下: -

#include<stdio.h> 
#include<conio.h> 
int CharPrint(char *ptr); 
main() 
{ 
    char *str="Hello World"; 
    int (*ptr1)(char *ptr); 
    ptr1=CharPrint; 
    if((*ptr1)(str)) 
     printf("Done"); 
    return 0; 
} 
int CharPrint(char *ptr) 
{ 
    printf("%s\n",ptr); 
    return 0; 
} 

這個程序運行沒有任何打嗝。

的輸出是: -

enter image description here

我的問題是,在所述第一輸出,它爲什麼表示上線9「在功能主要不允許使用的類型」其他的線也產生懷疑,但這條線最讓我煩惱。任何幫助?

+1

那麼,至少「void函數可能不會返回值」是一個明顯的例子。你確定你正在編譯你在這裏給我們展示的代碼嗎?另外,你的代碼不適合C;相反,這是一種在1970年代暫時使用的C風格。您可能想要獲得現代知識來源。 –

+0

@KerrekSB我正在編譯我在此向您展示的代碼。然而,「不返回任何東西」的概念似乎合乎邏輯。然而,主要問題是在第9行。你能幫我解決嗎? – kusur

+0

@kusur如果在你的編輯器中有9行是if條件,那麼會給你錯誤。它可能沒有得到任何測試。 –

回答

5
void (*ptr1)(char *ptr); 
ptr1=CharPrint; 
if((*ptr1)(str)) 
    printf("Done"); 

什麼if測試,如果返回值是void?只需將最後兩行改爲:

((*ptr1)(str)); 
+0

我認爲一個無效函數會返回一些東西真的很愚蠢。謝謝您的幫助。 – kusur

7

你的第一個函數不返回任何東西。因此,您不能測試 if((*ptr1)(str))