C 函数指针不返回值
我们刚刚在学校学到了C语言中的函数指针,我想在测试程序中试用它们。这个想法显然很简单。但是,当我尝试使用C 函数指针不返回值,c,function-pointers,C,Function Pointers,我们刚刚在学校学到了C语言中的函数指针,我想在测试程序中试用它们。这个想法显然很简单。但是,当我尝试使用result=(*funcPtr)()时我得到一个状态\u访问\u违规异常,但我无法判断我做错了什么。你知道我遗漏了什么吗 #include <stdio.h> int fun1(); int fun2(); int (*funcPtr)(void); int fun1() { return 1; } int fun2() { return 2; } int ma
result=(*funcPtr)()时代码>我得到一个状态\u访问\u违规
异常,但我无法判断我做错了什么。你知道我遗漏了什么吗
#include <stdio.h>
int fun1();
int fun2();
int (*funcPtr)(void);
int fun1() {
return 1;
}
int fun2() {
return 2;
}
int main(void) {
int input,result = 0;
scanf("%d",input);
if(input == 1) {
funcPtr = &fun1;
} else if(input == 2) {
funcPtr = &fun2;
}
result = (*funcPtr)();
printf("%d\n",result);
}
#包括
int fun1();
int fun2();
int(*funcPtr)(无效);
int fun1(){
返回1;
}
int fun2(){
返回2;
}
内部主(空){
int输入,结果=0;
扫描频率(“%d”,输入);
如果(输入=1){
funcPtr=&fun1;
}else if(输入=2){
funcPtr=&fun2;
}
结果=(*funcPtr)();
printf(“%d\n”,结果);
}
在scanf
中输入之前,您忘记了一个&
。因此,scanf
不会写入输入
变量的地址,而是写入其值(此时变量未初始化)
将该行更改为:
scanf("%d", &input);
将指向input
的指针传递到scanf
而不是input
的值
正如其他用户已经指出的,不要忘记处理1
和2
以外的输入。否则,您将调用未初始化的funcPtr
变量,这很可能导致分段错误。您在scanf
中输入之前忘记了&
。因此,scanf
不会写入输入
变量的地址,而是写入其值(此时变量未初始化)
将该行更改为:
scanf("%d", &input);
将指向input
的指针传递到scanf
而不是input
的值
正如其他用户已经指出的,不要忘记处理1
和2
以外的输入。否则,您将调用未初始化的funcPtr
变量,这很可能导致分段错误。问题在于scanf
(scanf(“%d”,input);
)而不是函数指针。您缺少&
。请不要忘记处理输入既不是1
也不是2
的情况。您可能需要这样做。特别是如何使用调试器捕获崩溃,因为它们恰好位于代码中问题所在的位置。提示:scanf()
您应该在函数声明和定义中包含(void)
,而不是()
。有一点不同。问题在于scanf
(scanf(“%d”,输入);
)不是函数指针。您缺少&
。请不要忘记处理输入既不是1
也不是2
的情况。您可能需要这样做。特别是如何使用调试器捕获崩溃,因为它们恰好位于代码中问题所在的位置。提示:scanf()
您应该在函数声明和定义中包含(void)
,而不是()
。这是不同的。谢谢你,你和其他发表评论的人为我指明了正确的方向。我可能应该提到,input
实际上是垃圾数据,而不是0
。谢谢@Tau,你是对的。我已经更新了我的答案谢谢你,你和其他发表评论的人为我指明了正确的方向。我可能应该提到,input
实际上是垃圾数据,而不是0
。谢谢@Tau,你说得对。我已经更新了我的答案