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

为何编译器对传递变量引用作为函数参数时报错?

C语言引用参数编译错误的解决方法

你遇到的编译错误是因为标准C语言不支持引用(int&这种写法),这是C++独有的语法特性。

错误原因

你写的int& sum是C的引用传参语法,但GCC在编译C代码时(默认识别.c后缀文件为C语言代码)会严格遵循C标准,因此会抛出语法错误。如果你的书籍里称这种写法可行,大概率是书籍混淆了C和C的语法,或是默认用C++编译器来编译代码。

修正后的C语言实现

要在C语言中实现“修改原变量值”的效果,需要借助指针完成:

#include <stdio.h>

// 函数声明改为指针参数
void adding(int a, int b, int *sum);

int main(int argc, char const *argv[])
{
    int sum = 0;
    int a = 5;
    int b = 6;
    printf("Sum of %d and %d = ", a, b);
    // 传递sum的内存地址
    adding(a, b, &sum);
    printf("\n%d", sum);

    return 0;
}

// 函数定义使用指针参数
void adding(int a, int b, int *sum) 
{
    // 解引用指针,直接修改原变量的内存值
    *sum = a + b; 
    printf("%d", *sum);
}

关键修改点

  • 函数参数从int& sum改为int *sum:用指针类型接收变量的内存地址
  • 调用函数时传入&sum:把sum的内存地址传递给函数
  • 函数内部用*sum操作:解引用指针,直接修改原变量的实际值

编译运行这段代码后,main函数中的sum会被正确修改为11,完全符合你原本的验证需求。

内容的提问来源于stack exchange,提问作者Иванов Леонид

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:33:12