2017-09-13 145 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的名称,但我可能是错的 –

相关问题