2017-09-13 37 views
-3

我的代碼如下,並且問題也在下面解釋爲什麼lvalue正在發生;在c函數指針中作爲一元'&'操作數需要左值

typedef struct test_item 
{ 
    char id[MENU_NAME_LEN + NULL_SPACE]; 
    MenuFunction function; 
} test_item; 

typedef void (*MenuFunction)(VmSystem *); 

void display(VmSystem * system) 
{ 
    printf("test"); 
} 

我能夠標識與不過我想要指派當我試圖函數指針我得到所需的下列錯誤lvalue分配作爲一元操作數&操作數

test_item test; 
test.function = &display(system); 
+1

函數名後跟'()'表示調用函數。沒有'()'的函數名稱表示函數地址。 – Gerhardh

+0

我不明白你要在這裏做什麼,但是'&display(system)'要求C爲你提供一個叫做'display'的函數返回值的地址。但是,該值在處理器寄存器中返回;它根本沒有地址。所以'test.function =&display(system)'這一行沒有任何意義。 –

+0

@Johnny S寫test.function = **********顯示; –

回答

4

您的意思是:

test.function = display; 

()display手段來調用該函數。只需display將評估爲一個指向該函數的指針。沒有必要爲&display

+0

謝謝,當我嘗試稍後調用它時,我得到以下消息,這次做了什麼錯誤 - 「從不兼容的指針類型傳遞'test-> function'的參數1」我正在通過此代碼段調用它; test.function(system) –

+0

@JohnnyS什麼是'system'?這是一個陰暗的變量名稱,因爲它會影響[同名的標準函數](https://linux.die.net/man/3/system),這可能會導致問題。 – unwind

+0

我讀到「typedef void(* MenuFunction)(VmSystem *);」第二個()是函數的輸入,所以它只是VmSystem的名稱,但我可能是錯的 –

相關問題