c - 函数指针不返回值
问题描述
我们刚刚在学校学习了 C 中的函数指针,我想在测试程序中试用它们。这个想法显然很简单。但是,当我尝试使用时,result = (*funcPtr)();
我得到了一个STATUS_ACCESS_VIOLATION
例外,但我不知道我做错了什么。关于我缺少什么的任何想法?
#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);
}
解决方案
您忘记了&
之前的输入scanf
。因此scanf
写入的不是input
变量的地址,而是它的值(此时变量未初始化)。
将该行更改为:
scanf("%d", &input);
传递指向input
而scanf
不是值的指针input
。
正如其他用户已经指出的那样,不要忘记处理 和 以外的1
输入2
。否则,您将调用未初始化的funcPtr
变量,这很可能会导致分段错误。
推荐阅读
- docker - 从 Docker Toolbox 连接到 docker 地址
- objective-c - Objective-C 属性类型中指定的旧式编码是什么?
- c - 为什么这不会在 C 中生成越界访问?
- mongodb - 如何加速许多文档的大型数组的聚合
- c++ - string::replace 是否替换无效的迭代器和引用?
- heroku - 用户不断在 heroku node.js 应用程序上注销
- .net - 使用 MSDeploy... 你如何发布 Web.QA.config => Web.config
- twitter-bootstrap - Bootstrap 将两行宽列折叠成一行
- matplotlib - 将字体更改为 avant Matplotlib
- python - Geany IDE:“没有名为 matplotlib 的模块”