2015-12-11 18 views
0

我有以下代碼:處於不活動狀態結構函數指針用C

#include <stdio.h> 
#include <stdlib.h> 

struct Book { 
    char title[50]; 
    char author[50]; 
    char subject[100]; 
    int numPages; 
    int numBooks; 

    int (*p) (int *, int *); 
}; 

int sum (int *a, int *b) { 
    return *a + *b; 
} 

int main() { 
    struct Book var; 
    var.numPages = 7; 
    var.numBooks = 9; 
    int allPages = (*var.p) (&var.numPages, &var.numBooks); 

    printf("%d\n", allPages); 
    return (EXIT_SUCCESS); 
} 

我試圖在結構使用功能的,但我的程序沒有結果,沒有任何警告,雖然我用-Wall,-Wextra。我是新手。希望大家幫忙。

+1

您沒有設置'p'到一個有效的功能!你需要'var.p = sum'。我很驚訝你沒有訪問違規。行爲是未定義的。它沒有警告編譯的事實並沒有捕捉到這樣的事情,因爲這是一個運行時錯誤。 – lurker

+0

'int main()'不是'main'的有效簽名。 – Olaf

回答

2

var.p未初始化(意味着它幾乎肯定不會引用有效函數),從而創建未定義的行爲。在函數調用之前使用var.p = sum;來初始化它。

+0

啊哈。感謝大家。我的faukt。我忘了。 –

0

在你的代碼中,你應該先將一個函數分配給一個指針,然後再通過一個指針調用一個函數。這個代碼應該是

int main() 

    { 
    struct Book var; 
    var.numPages = 7; 
    var.numBooks = 9; 
    var.p=sum; 

    int allPages =var.p(&var.numPages, &var.numBooks); 

    printf("%d\n", allPages); 
    return (EXIT_SUCCESS); 
    } 

進一步的信息可以參考

C - function inside struct