C 函数引用参数传递error
问题描述:
在test.c中,定义函数并为函数传引用参数,代码如下:
void test(int& a){
//....
a = 666;
}
结果在定义时IDE便提示error:
1、请输入")" C/C++(18)
2、存在正文时不允许未命名的原型参数 C/C++(141)
原因分析:
.c文件为纯C语言,不支持引用。
解决方案:
1、将*.c文件重命名为*.cpp文件。
2、将引用传参改为指针传参,即:
void test(int* a){
//....
*a = 666;
}
关于C函数参数传递方式总结如下:
(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。
(2)传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。
(3)传引用,实际是通过指针来实现的,能达到使用的效果如传址,可是使用方式如传值。
说几点建议:如果传值的话,会生成新的对象,花费时间和空间,而在退出函数的时候,又会销毁该对象,花费时间和空间。
示例如下(test.cpp):
#include<stdio.h>
void change(int*a, int&b, int c)
{
c=*a;
b=30;
*a=20;
}
int main ( )
{
int a=10, b=20, c=30;
change(&a,b,c);
printf("%d,%d,%d",a,b,c);
return 0;
}
//结果:20 30 30