Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数指针不返回值_C_Function Pointers - Fatal编程技术网

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

我们刚刚在学校学到了C语言中的函数指针,我想在测试程序中试用它们。这个想法显然很简单。但是,当我尝试使用
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,你说得对。我已经更新了我的答案