C语言讲义——传值、传引用

传值

值类型在做参数的时候,函数内使用的是实参的副本
函数执行完毕后,即使函数内对参数做了修改,调用方的参数还是原来的值。

#include <stdio.h>
// 值调用
void swap_value(int x, int y) {
	int temp = x;
	x = y;
	y = temp;
}
main() {
	int x = 0;
	int y = 1;
	printf("x = %d, y = %d\n", x, y);

	swap_value(x, y);
	printf("传值调用后:x = %d, y = %d\n", x, y);
}

运行结果:

x = 0, y = 1
传值调用后:x = 0, y = 1

传引用

将地址传入参数,在地址指向的内存空间中修改具体的值,则调用方亦可取也。

#include <stdio.h>
//  “值调用”
void swap_value(int x, int y) {
	int temp = x;
	x = y;
	y = temp;

}
// “引用调用1”,形参:传的是地址,取得是值(*)
void swap_p(int* x, int* y) {
	int temp = *x;
	*x = *y;
	*y = temp;
}
// “引用调用2”,形参:传的是值,接的是地址
void swap_addr(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}
main() {
	int x = 0;
	int y = 1;
	printf("x = %d, y = %d\n", x, y);

	swap_value(x, y);
	printf("传值调用后:x = %d, y = %d\n", x, y);

	swap_p(&x, &y);
	printf("传地址调用后:x = %d, y = %d\n", x, y);

	swap_addr(x, y);
	printf("传值接地址调用后:x = %d, y = %d\n", x, y);
}

运行结果:

x = 0, y = 1
传值调用后:x = 0, y = 1
传地址调用后:x = 1, y = 0
传值接地址调用后:x = 0, y = 1	←(0,1)换成(1,0);这一步又还回来(0,1)

练习:返回值,返回参数

定义一个函数,要求能够同时得到一个整型数组的最大值和最小值。

#include <stdio.h>
// 返回值:最大值
// 返回参数:最小值
int max_min(int a[], int len, int *min) {
	int nMax = a[0];
	int nMin = a[0];
	for(int i = 0; i<len ; i++) {
		if (nMax < a[i]) {
			nMax = a[i];
		}
		if (nMin > a[i]) {
			nMin = a[i];
		}
	}
	*min = nMin;
	return nMax;
}

int main(int argc, char *argv[]) {
	int a[]= {1,2,5,9,7};
	int len = sizeof(a)/sizeof(int);

	int nMax_main;
	int nMin_main;
	nMax_main = max_min(a, len, &nMin_main);
	printf("Main : Max = %d, Min = %d\n", nMax_main, nMin_main);

	return 0;
}
posted @ 2019-07-15 21:16  虎老狮  阅读(1443)  评论(1编辑  收藏  举报