C语言传指针给函数未得到预期值:调用testing后num输出随机数如何解决
问题原因
- C语言的函数参数默认采用值传递规则,你传入
testing函数的指针参数number,本质是main函数中num变量地址的临时副本。你在testing内执行number = #仅修改了这个临时指针变量本身的指向,完全不会对main中的num变量产生任何影响。 - 你在
testing内定义的int num = 12是栈区局部变量,函数执行结束后对应的栈空间会被系统回收,即使你能把这个地址传回主函数,后续访问也属于非法的内存访问。 - 目前
main中的num变量从未被初始化赋值,属于未定义的局部变量,所以打印出来的是栈内存中残留的随机数值。
解决方法
你的需求是通过传入的指针修改其指向的变量的值,正确操作是直接对指针做解引用赋值,而非修改指针本身的指向。修改后的正确代码如下:
int testing(int *number) { // 对指针指向的内存空间直接赋值,对应修改main中num变量的值 *number = 12; return 0; } int main() { int num; testing(&num); printf("The number is: %d", num); return 0; }
修改后运行程序会正常输出The number is: 12。
内容的提问来源于stack exchange,提问作者forkbun882
相关产品推荐
相关产品推荐

