我正在尝试使用单独的函数来输入数据scanf()
(在 之外main
)。这个新功能应该打印一行,然后接收用户的输入。然而,函数scanf
中的函数和我正在测试它的函数之间似乎出现了问题。printf()
main
我相信我收到了来自函数的指针,但某些编译器警告让我怀疑我对指针的假设是否正确。
我对这段代码的输出感到困惑:
#include <stdio.h>
void set_Info(void);
int main()
{
int scanNum = 0;
set_Info();
printf("%d", &scanNum);
return 0;
}
void set_Info(void) /* start of function definition */
{
int scanNum;
printf("Scan test, enter a number");
scanf("%d",&scanNum);
}
如果我提供一个数字,比如 2,main() 中 printf 语句的结果是:
2665560
现在,据我所知,输出在我看来就像一个内存地址,所以我试图解决这个问题是取消引用 main 中的指针,如下所示:
int scanNum = 0;
int scanNumHolder;
set_Info();
scanNumHolder = *scanNum;
printf("%d", &scanNumHolder);
我相信这段代码会使scanNum
变量分配给scanNum
. 但是,当我这样做时,我会得到与上面相同的输出。这使我相信两件事之一。要么我没有正确取消引用scanNum
,要么scanNum
在这种情况下实际上根本不是指针。
我从编译器收到的最常见错误是:
error: invalid type argument of unary ‘*’ (have ‘int’)
我想,如果我试图将int
值视为指针,这是有道理的。
如果scanNum
是没有正确取消引用的情况,我该如何实现?
感谢您的帮助
*更新
谢谢您的帮助。
只是回顾一下
我的 set_info 函数需要传递一个地址参数。必须使用地址参数的原因是函数的本地内存在函数调用结束后被擦除。因此,为了完成在主函数中声明的变量,我传递了相关变量的地址,以便在函数结束时不会丢失更改。
在主函数内部,当使用 &scanNum 作为参数调用 set_info 时,它会传递一个引用 tp 变量,以便可以为其分配函数中 scanf 语句生成的值。
我意识到我做错了什么,正如 SO 的真棒人正确指出的那样,我试图调用 set_info 就像它返回一个值一样,但实际上改变了我真正想要的变量。
再次感谢您的帮助!