C 语言支持 值传递和指针传递
C++ 支持 值传递,指针传递,引用传递
下面的代码保存两份,一个C语言代码 test.c,一个C++语言代码 test.cpp
函数 test1 值传递:不会改变函数外变量的值
函数 test2 指针传递:会改变函数外变量的值
函数 test3 引用传递:会改变函数外变量的值
#include <stdio.h>
void test1(int a, int b)
{
printf("in func test1 %d,%d\n",a,b);
a=100;
b=200;
}
void test2(int *a, int *b)
{
printf("in func test2 %d,%d\n",a,b);
*a=100;
*b=200;
}
void test3(int &a, int &b)
{
printf("in func test3 %d,%d\n",a,b);
a=100;
b=200;
}
int main()
{
int a=10, b=20;
test1(a,b);
printf("main %d,%d\n",a,b);
int c=10, d=20;
test2(&c,&d);
printf("main %d,%d\n",c,d);
int e=10, f=20;
test3(e,f);
printf("main %d,%d\n",e,f);
return 0;
}
先编译 test.c, test3函数 有错误:error: expected ';', ',' or ')' before '&' token ,说明C语言不支持引用传递。
把test3 函数去掉后可以正常编译通过。
再编译 test.cpp,可以编译通过
执行C++ 编译后的文件 test.exe
函数 test1 中赋值没有改变函数外的变量的值,函数 test2 test3 中赋值可以改变函数外的变量的值。