我目前正在使用Visual Studios上课,不用说我很难理解指针。我创建了一个程序,但似乎不适合我。单击我想要的函数类型后,我不断收到断言错误。我得到一个Debug断言失败弹出错误。表达式:result_pointer!= nullptr。它说1558行
int function1(int a,int b);
int function2(int a, int b);
int function3(int a, int b);
int(*p[3])(int x, int y);
int main()
{
int num1, num2;
int choice = 0;
p[0] = function1;
p[1] = function2;
p[2] = function3;
printf("Please enter two numbers: ");
scanf_s("%d", &num1);
scanf_s("%d", &num2);
printf("Which would you like to try (1 for Math, 2 for Subtraction, 3 for Multiplication): \n");
scanf_s("%d", choice);
int (*i) = &choice;
while (*i >= 0 && *i < 3) {
(p[*i])(num1,num2);
}
puts("Program execution compiled");
}
int function1(int a, int b)
{
int total;
total = a + b;
return total;
}
int function2(int a, int b)
{
int total;
total = a - b;
return total;
}
int function3(int a, int b)
{
int total;
total = a * b;
return total;
}
答案 0 :(得分:2)
这就是您的代码失败的原因:
scanf_s("%d", choice);
您忘记使用运营商&
的地址。
scanf_s("%d", &choice);
当然,你的代码还有很多其他的怪癖。
例如,
int (*i) = &choice;
?仅仅采用choice
并减去1
会更有意义吗?无需使用指针int i = choice - 1
。i
小于零或大于2,如果输入的输入正确,则永远不会。考虑选择另一个循环条件,或者使用if
语句交换循环。printf("%d\n", (p[i])(num1,num2)
(假设你已经修复了i
是指针的事情)