函数指针不返回值

Function pointer not returning a value

我们刚刚在学校学习了 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 的值。

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