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

C语言中我的引用传递代码为何未生效?求排查与修复方案

问题原因
  • 普通变量a传递给set_int时是值传递:函数里的x是a的独立副本,修改x只会改变副本的值,原变量a不会受到影响,所以输出里a还是初始的10。
  • 数组b传递给set_array时,C语言会自动将数组名转换为指向首元素的指针,函数里的array本质是int*类型,修改array[0]直接操作的是原数组的内存空间,所以b[0]能被改成22。
修复方案(若需修改普通变量的值)

要让函数能修改普通变量,得用指针传递,把变量的地址传给函数,通过指针访问原变量的内存:

修改后的完整代码:

#include <stdio.h>

void set_array(int array[4]);
void set_int(int *x);

int main(void) {
    int a = 10;
    int b[4] = { 0, 1, 2, 3 };
    set_int(&a); // 传入a的地址
    set_array(b);
    printf("%d %d\n", a, b[0]);
}

void set_array(int array[4]) {
    array[0] = 22;
}

void set_int(int *x) {
    *x = 22; // 解引用指针,修改原变量的值
}

运行这段代码,输出会是22 22,符合修改原变量的预期。

内容的提问来源于stack exchange,提问作者Pallavi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:42:45