C语言:任意输入两个整数,交换并输出(合集补充)

上一文讨论了C语言:任意输入两个整数,交换并输出(合集)。

但随着进一步学习,会遇到考察不同小细节的新奇题目。是值得大家更深刻的去辨析的。

感兴趣可以直接去学习。

C语言:任意输入两个整数,交换并输出(合集)

本文直接补充(错误辨析版)地址交换这种特殊情况,为什么不去直接修改上一篇文章呢?因为我想水一篇!但是质量可不水!hahaha

 (错误辨析版)地址交换,强调与地址的交换而不是地址的传递!这是不能完成数值交换的本质原因!

#include<stdio.h>
void swap(int *a,int *b);
int main()

{
	int i,j;
    scanf("%d%d",&i,&j);
    int *p=&i,*q=&j;
	swap(p,q);
	printf("%d%d\n",*p,*q);
	return 0;
}

void swap(int *a,int *b)
{
	int *t;
	t=a;a=b;b=t;
}

问输入10 5后程序输出什么样的结果?小编做这题时,自信慢慢,哟~考察指针的地址传递了,有了上次的教训和学习,最终又填入了错误答案510!

理论实践

其实是没真正的明白其中的逻辑!将容易弄混的代码放在一起,大家观察比较!

 第二个是可以实现交换的(地址传递)

#include<stdio.h>
void swap(int *a,int *b);
int main()

{
	int i,j;
    scanf("%d%d",&i,&j);
    int *p=&i,*q=&j;
	swap(p,q);
	printf("%d%d\n",*p,*q);
	return 0;
}

void swap(int *a,int *b)
{
	int t;
	t=*a;*a=*b;*b=t;
}

 理论实践

其实很容易看出来,是自定义swap中不同。

地址交换中swap定义了新的指针*t,而地址传递中swap定义了新的整形t(上一篇解释过如有需要C语言:任意输入两个整数,交换并输出(合集))。

为什么不能实现呢?

函数swap(int *a,int *b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,参形指针变量a和b分别指向i和j,在swap(int *a,int *b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果仍为105。

 其他视图说明

两个人从监狱的窗户往外看,一个看见了土地,一个看见了星星。——徐伦

希望对你有帮助,语言学习贵在坚持输入和输出!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值