【发布时间】:2020-10-04 16:41:00
【问题描述】:
我有这种计算器,用天文数字运算,这是菜单的代码片段。
我需要完成的是将main 中声明的result 指针传递或初始化给菜单内的函数。
问题是,如果我初始化它,例如,在函数realizarSuma() 中,在while 循环的每次迭代之后,它会再次设置为NULL,所以我永远不能在另一个操作中使用那个result稍后。
int main() {
NumeroAstronomico *result = NULL;
int opcion;
int finaliza = 0;
while (finaliza == 0) {
printf("1.Sumar valores\n2.Verificar igualdad de dos numeros\n3.Verificar menor valor\n"
"4.Guardar resultados\n5.Cargar resultados\n6.Salir\n\n");
printf("Opcion:");
scanf("%d", &opcion);
finaliza = menu(opcion, result);
}
return 0;
}
int menu(int opcion, NumeroAstronomico *result) {
switch (opcion) {
case 1:
result = realizarSuma();
printf("result %s\n", result->entero); //I get the correct result
return 0;
case 2:
verificarIgualdad();
return 0;
case 3:
obtenerMenor(result);
return 0;
case 4:
printf("result %s\n", result->entero);
guardarResultado(result);
return 0;
case 5:
result = cargarResultado();
return 0;
case 6:
exit(0);
default:
printf("Opcion Invalida, ingrese nuevamente\n");
return 0;
}
}
为什么会发生这种情况,我该如何避免这种行为?
【问题讨论】:
-
menu中的变量result是main中result的副本。它不是同一个变量,即使名称相同。在menu中更改result对main中的result没有影响。您要么需要从menu返回result,要么需要在menu中将result声明为指向指针的指针(NumeroAstronomico **result),然后传递地址 i> ofresult到函数,例如menu(opcion, &result) -
将其称为副本真的公平吗?答案可能与另一个问题的答案相同,但 OP 没有问“如何修改传递给函数的指针?”他根本不知道他需要将指针传递给指针。他需要帮助找出他做错了什么。
-
@shrewmouse 是的,这正是发生的事情。当我在问自己的问题之前搜索答案时,我不知道许多已经回答的问题会解决我的问题