首页 > 解决方案 > 函数指针不返回值

问题描述

我们刚刚在学校学习了 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);
}

标签: cfunction-pointers

解决方案


您忘记了&之前的输入scanf。因此scanf写入的不是input变量的地址,而是它的值(此时变量未初始化)。

将该行更改为:

scanf("%d", &input);

传递指向inputscanf不是值的指针input

正如其他用户已经指出的那样,不要忘记处理 和 以外的1输入2。否则,您将调用未初始化的funcPtr变量,这很可能会导致分段错误。


推荐阅读