参数传递与指针

参数传递

函数传递参数实际上是值传递。什么是值传递呢,举两个例子:

void swap(int a, int b) {
	int t = a;
	a = b; 
	b = t;
}
int main(){
	int a = 1,b = 2;
	swap(a,b);
	swap(1,2);
}

看代码中调用swap函数是不是既能传递变量a,b又可以传递1,2。你想通过swap函数去交换a,b。不就相当于去交换1,2的值嘛???what?你觉得这可能发生嘛,1还是1,2还是2不可能改变的。
所以说对于主函数传递的参数只是变量的中的内容,跟变量一毛钱关系都没有。
子函数中的参数变量a,b只是用来接收主函数传递的值
那么接下来看是怎么通过指针来交换值的。

void swap(int* pa, int* pb) {
	int t = *pa;
	*pa = *pb;
	*pb = t;
}
int main(int argc, char** argv) {
	int a = 1;
	int b = 2;
	swap(&a, &b);
	printf("%d %d", a, b);
	return 0;
}

还记的上面说的嘛,主函数调用子函数传递的是值&a,&b是什么?是a,b的地址—那一串16进制字符,&的作用就是获得变量的地址
什么变量才能装地址呢,那只能是指针变量了,在子函数中,我们用int* pa, int* pb来接受a,b的地址
函数体里:t = *pa, 指针变量pa的值=Ox12,加上*就表示获得地址Ox12的内容。即t = 1,*pa = *pb就是让a地址中的内容等于2,同理*pb = t,就是让b地址中的内容等于1.这样就完成了交换。
在这里插入图片描述

指针

对于任何类型的指针可以把变量类型和*(int*)放在一起,变量名a分开来看。
int* a, double* b;
变量只是存储内容的,而指针变量的内容就是地址。 int* 类型的指针变量用来存储int型的地址,其他类型的同理。
*+指针变量名,就是取变量存放的那个地址中的值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值