函数指针不返回值
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
的值。
正如其他用户已经指出的那样,不要忘记处理 1
和 2
以外的输入。否则,您将调用未初始化的 funcPtr
变量,这很可能会导致分段错误。
我们刚刚在学校学习了 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
变量,这很可能会导致分段错误。