C语言指针传参函数输出错误,变量赋值逻辑有什么问题?
错误原因
你对指针传参的逻辑理解有误,核心问题有2个:
- 你在函数内写的
result=&i;只是修改了形参指针本身的指向,C语言所有参数都是值传递,指针形参本质是传入的地址的副本,修改这个副本的指向,完全不会影响main函数中result变量的内存值。 - 就算你强行返回局部变量的地址,
i是func2内的局部变量,函数执行结束后栈空间就会被回收,这个地址存储的内容会变成无效垃圾值,也不可能拿到正确结果。
你遇到的输出32767就是main函数里的result变量没有被赋值,输出了栈上未初始化的随机垃圾值。
正确实现
不需要额外定义局部变量存储计算结果,直接对指针指向的内存空间赋值即可:
void func2(int num, int *result) { *result = 0; // 先对指针指向的内存初始化清零 while (num != 0) { *result += (num % 10) * (num % 10); num = num / 10; } }
修改后输入24就会得到预期输出func2(): 20。
内容的提问来源于stack exchange,提问作者Tajoh Programmer
相关产品推荐
相关产品推荐

