You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:36:02