为何编译器对传递变量引用作为函数参数时报错?
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,提问作者Иванов Леонид
相关产品推荐
相关产品推荐

