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

C语言调用自定义函数修改参数后打印结果与预期不符问题咨询

问题原因

  • C语言中普通基础类型的参数传递默认是值传递,函数形参是实参的独立副本,修改形参不会影响原实参的值。
  • 你在fun函数中操作的i、j是调用时从main函数拷贝过来的临时变量,仅在fun函数的作用域内有效,fun执行结束后这些临时变量就会被销毁,完全不会修改main中原有i、j的值,因此最终输出还是初始的5 2。

修复方案

如果要通过函数修改外部变量的值,需要传递变量的内存地址(即使用指针作为形参),示例代码如下:

#include <stdio.h>
void fun ( int*, int* )  ;
int main( )
{
  int i = 5, j = 2 ;
  fun ( &i, &j ) ; // 传入变量的地址
  printf ( "%d %d\n", i, j ) ;
  return 0 ;
}
void fun ( int *i, int *j )
{
 *i = (*i) * (*i) ; // 操作地址指向的原变量
 *j = (*j) * (*j) ;
}

修改后运行即可输出你预期的25 4。


内容的提问来源于stack exchange,提问作者Sumit Kumar Jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:21:01