函数指针未返回值

时间:2018-11-05 16:04:24

标签: c function-pointers

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

1 个答案:

答案 0 :(得分:4)

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

将该行更改为:

scanf("%d", &input);

将指向input的指针传递给scanf,而不传递input的值。

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