C语言的函数传递有两种类别,一种是最常用的值传递,另一种是比较有用但又容易出错的地址传递。
值传递实际是将实参的值复制到形参相应的存储单元中,形参和实参分别占用不同的存储单元。在调用结束后,形参的存储单元被释放,而形参值的任何变化都不会影响到主函数中实参的值,实参的存储单元仍保留并维持数值不变。
我在上上一篇文章《结构体作为函数参数的传递》中,着重讲了地址传递。有两种方法:一是使用指向指针的指针,二是函数返回指针。但现在我发现还有“第三种”方法——直接取地址。本篇文章算是对上上篇文章的补充。
看下面一段代码。
#include <stdio.h>
void test(int *b)
{
(*b)=(*b)*2;
}
int main()
{
int c=7;
test(&c);
printf("%d",c);
return 0;
}
这是第一种方法,指针指向主函数中要修改的变量。(第二种方法就不展示了,比较简单)
除此之外,还可以直接取地址。
#include <stdio.h>
void test(int &b)
{
b=b*2;
}
int main()
{
int c=5;
test(c);
printf("%d",c);
return 0;
}
此处的形参b是引用类型,具体原理笔者也不太清楚……只知道b与c是同一个地址的同一个东西。能力有限,欢迎大佬斧正。