C 语言笔记 —— 函数参数带 & 和不带 & 的区别

在 C 语言的函数中定义参数时,有时会用到 &,比如:

void InitSqList(SqList &L) { // 顺序表初始化函数
	for (int i = 0; i < MAX_SIZE; i++)
		L.data[i] = 0;
	L.length = 0;
}

那么,定义的参数用 & 和不用 & 有什么区别?下面我们来比较一下。
首先是不带 & 的参数。

#include

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

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

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

你可能感兴趣的:(c语言)