在 C 语言的函数中定义参数时,有时会用到 &,比如:
void InitSqList(SqList &L) { // 顺序表初始化函数
for (int i = 0; i < MAX_SIZE; i++)
L.data[i] = 0;
L.length = 0;
}
那么,定义的参数用 & 和不用 & 有什么区别?下面我们来比较一下。
首先是不带 & 的参数。
#include<stdio.h>
void test(int x) {
x = 1024;
printf("在函数中的 x = %d\n",x);
}
int main() {
int x = 666;
printf("未经过函数的 x = %d\n",x);
test(x);
printf("经过函数的 x = %d\n",x);
}
运行结果为
未经过函数的 x = 666
在函数中的 x = 1024
经过函数的 x = 666
可以看到在函数中已经对 x 进行了修改,但回到主函数中 x 的数值并没有发生变化。现在给参数添加 &。
#include<stdio.h>
void test(int &x) {
x = 1024;
printf("在函数中的 x = %d\n",x);
}
int main() {
int x = 666;
printf("未经过函数的 x = %d\n",x);
test(x);
printf("经过函数的 x = %d\n",x);
}
运行结果为
未经过函数的 x = 666
在函数中的 x = 1024
经过函数的 x = 1024
可以看到添加了 & 之后,主函数中 x 通过 test 函数修改成功了。
实际上,主函数中定义的 x 和 test 函数的参数 x 并不是同一个,在虚拟内存中,它们的地址是不同的。而 & 叫做引用符,它是 C++ 的内容(目前多数 C 语言编译器也能使用),它可以引用主函数中 x 的地址,这样就可以对主函数中的 x 进行修改。所以当 C 语言开发中,函数需要对原变量进行修改时,可以给该参数添加 &。这样函数中对参数的修改,就是对原变量的修改。
效果类似于使用并接收返回值。
#include<stdio.h>
int test(int &x) {
x = 1024;
printf("在函数中的 x = %d\n",x);
return x;
}
int main() {
int x = 666;
printf("未经过函数的 x = %d\n",x);
x = test(x);
printf("经过函数的 x = %d\n",x);
}
运行结果
未经过函数的 x = 666
在函数中的 x = 1024
经过函数的 x = 1024