传值、传引用、传指针

传值

C中,所有非数组形式的数据实参均为值传递形式,值传递也就是调用函数的时候,把实参拷贝一份给调用函数,就是说函数操作的是实参的拷贝不是实参本身。在子函数中,对传递的参数(形式参数)进行的修改不会作用于原变量。

#include <stdio.h>
void test(int x, int y);
int main() {
	int a = 1, b = 2;
	test(a, b);//在这里传递的就是a,b的值,接下来在子函数test()中,对x,y的操作不会影响a,b的原值
	printf("%d %d", a, b);
}
void test(int x, int y) {
	int tem;
	tem = x;
	x = y;
	y = tem;
}

接下来是对变量的监视,可以看到,在执行完代码以后,x,y的值进行了互换变成了2,1,但是原值a,b仍然是1,2

传引用

引用原变量是一个东西,只是换了一个称呼
传引用实质上就是传递了原变量的地址
地址有了以后,对变量的操作就会直接对该地之内存在的值进行修改,也就是在子函数中对变量的操作将直接作用于原变量。

#include <stdio.h>
void test(int &x, int &y);
/*	子函数的形式参数带有取址符,当调用子函数时,会直接对传递的参数进行取地址操作,
	使得之后对x,y的操作直接作用于原变量	*/
int main() {
	int a = 1, b = 2;

	test(a, b);
	printf("%d %d", a, b);

}
void test(int &x, int &y) {
	int tem;
	tem = *x;
	*x = *y;
	*y = tem;

}

指针

传指针的本质是传值,但是这个值是原变量的地址

#include <stdio.h>
void test(int *x, int *y);
int main() {
	int a = 1, b = 2;

	test(&a, &b);
	printf("%d %d", a, b);

}
void test(int *x, int *y) {
	int tem;
	tem = *x;
	*x = *y;
	*y = tem;

}

监视器页面
在这里插入图片描述

可以看到x,y的值是一个二进制的数字,代表存放a和b的地址,后面的大括号指的是这个地址里面存放的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smile Hun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值