函数指针需要左值作为赋值运算符的左操作数

3
我试图将一个函数分配给一个函数指针,但是我遇到了以下错误: lvalue required as left operand of assignment.
我的代码如下:
#include <stdio.h>
void intr_handler(int param){
    printf("Hey there!\n");
}

int main(){
    void *(intr_handlerptr)(int);
    intr_handlerptr = intr_handler;
}

我看不出有什么问题,因为我将函数“intr_handler”赋值给指针“intr_handlerptr”,它们具有相同的签名。我漏掉了什么?

1个回答

2
“我不确定 void *(intr_handlerptr)(int); 是什么意思(尽管它可以编译),单独为此提问会很有趣,现在 完成 了)但这个声明是不正确的。应该改为:”
void (*intr_handlerptr)(int);

然后你的代码成功地编译了。
函数指针教程:https://www.cprogramming.com/tutorial/function-pointers.html 编辑:在讨论语法错误之后,现在似乎很明显。
void *(intr_handlerptr)(int);

"是相同的意思:"
void *intr_handlerptr(int);

所以前向声明一个函数(该函数不存在,因此不会链接,但您无法看到,因为编译器在尝试将某些内容分配给它时会发出错误)。

哎呀,你说得对,我想我写的指令声明了一个返回 void 指针的函数(也许?)。谢谢你的帮助 :) - Stubborn
1
返回指向 void 的指针将是 void *(*intr_handlerptr)(int);,有两个星号。不,这不是那个。 - Jean-François Fabre
1
@Stubborn,错误的解释确实非常简单。我没有看到它 :) - Jean-François Fabre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接