函数_调用指针交换函数(形参与实参)

前言:

谭浩强老师的书,很详细,但是个人感觉很冗余,就比如一个指针引用数组就穷举了一遍实参形参的情况,像这些东西都能用一句“指针与数组首地址等价”推出来的。这样冗杂的内容别说帮助学习,简直就是把知识复杂和模糊化。
本人此系列一是复习一遍之前没学好的C语言,二是提纲挈领地捋一下知识的难点,并且只说特殊及特别的东西,就是如果与之前知识不矛盾或者说可以推出来的就不提了。


下面就用一个例子来展示下如何不用全局变量改变函数外的多个值除了全局变量就是指针了。函数返回值又只能返回1个或0个值)


例子引自,谭浩强《C程序设计》第四版 P226~P229例子

#include <stdio.h>
void main()
{
	void swap1(int *p1, int *p2);
	void swap2(int *p1, int *p2);
	int a, b;
	int *p1, *p2;
	scanf("%d%d", &a, &b);
	p1 = &a;
	p2 = &b;
	if (a < b) swap1(p1, p2);
	printf("max=%d,min=%d\n", a,b);

	if (a < b) swap2(p1, p2);
	printf("max=%d,min=%d\n", a, b);

	return;
}
/*【因为形参生命周期是函数内,用完就销毁,所以swap1交换指针无用,
swap2交换所存值而销毁的是形参指针而不会销毁变量值故而有效】*/
void swap1(int *p01, int *p02)//函数内是交换指针地址
{
	int *p;
	p = p01;
	p01 = p02;
	p02 = p;
}

void swap2(int *p01, int *p02)//函数内是交换指针地址所存之值
{
	int p;
	p = *p01;
	*p01 = *p02;
	*p02 = p;
}


书中总是提及函数的“虚实结合”,实参形参形象来讲是什么

看看我用visio画的图吧~

上面代码有一句注释我要多说一句:

因为形参生命周期是函数内,用完就销毁,所以swap1交换指针无用,

swap2交换所存值而销毁的是形参指针而不会销毁变量值故而有效

(swap1)是为了展示函数的“虚实结合”和“值传递”的特点,1中就因为改的是形参指针(生命周期仅仅在函数里)改完就因函数被用完而被销毁,而无法改变外面的值。

(swap2)是为了展示指针改函数外面的值,2中就是形参指针实实在在改的是swap1函数外的地址里的值而形参指针被销毁后没人再管刚改的那些值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

超自然祈祷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值