【C语言】四种方法交换两个数(免费复制)

方法一:

通过中间变量t直接交换。

c 复制代码
#include<stdio.h>
//方法一 
int main()
{
	int a,b,t;
	printf("请输入a和b的值:\n");
	scanf("%d %d",&a,&b);
	printf("交换前:a=%d,b=%d\n",a,b);
	t=a;
	a=b;
	b=t;
	printf("交换后:a=%d,b=%d\n",a,b); 
}

方法二:

利用指针,将两个指针指向的变量的值进行交换,只改变内存单元的值,不改变指针指向的内存单元。

c 复制代码
#include<stdio.h>
//方法二
int main()
{
	int a,b,t;
	int *p1=&a,*p2=&b;
	printf("请输入a和b的值:\n");
	scanf("%d %d",p1,p2);
	printf("交换前:a=%d,b=%d\n",*p1,*p2);
	printf("交换前:p1=%d,p2=%d\n",p1,p2);
	t=*p1;
	*p1=*p2;
	*p2=t;
	printf("交换后:a=%d,b=%d\n",*p1,*p2); 
	printf("交换后:p1=%d,p2=%d\n",p1,p2);
	return 0;
} 

方法三:

利用指针,改变两个指针的指向,如原p1指向a,p2指向b,现在p1指向b,p2指向a。

c 复制代码
#include<stdio.h>
//方法三
int main()
{
	int a,b;
	int *p1=&a,*p2=&b,*p;
	printf("请输入a和b的值:\n");
	scanf("%d %d",p1,p2);
	printf("交换前:a=%d,b=%d\n",*p1,*p2);
	printf("交换前:p1=%d,p2=%d\n",p1,p2);
	p=p1;
	p1=p2;
	p2=p;
	printf("交换后:a=%d,b=%d\n",*p1,*p2); 
	printf("交换后:p1=%d,p2=%d\n",p1,p2);
	return 0;
} 

注意和方法二对比p1 p2的变化。

方法四:

写一个交换的子函数(同样利用指针),本质仍然是交换内存单元的值,但注意调用函数的实参应该用地址,因为被调用函数的形参是指针变量,指针就是地址,所以实参也必须是地址。

c 复制代码
#include<stdio.h>
//方法四
int swap(int *x,int *y)
{
	int t;
	t=*x;
	*x=*y;
	*y=t;
}

int main()
{
	int a,b;
	printf("请输入a和b的值:\n");
	scanf("%d %d",&a,&b);
	printf("交换前:a=%d,b=%d\n",a,b);
	swap(&a,&b);
	printf("交换后:a=%d,b=%d\n",a,b);
	return 0;
} 
相关推荐
码兄科技11 小时前
Java AI智能体开发实战:从零构建企业级智能应用指南
java·开发语言·人工智能
zh路西法11 小时前
【现代控制理论与卡尔曼滤波】从状态空间到Python仿真实现
开发语言·python
Evand J11 小时前
【论文复现】MATLAB例程,存在测距误差的WSN无锚点分布式自定位,《WSN中存在测距误差的无锚点分布式自定位方法》
开发语言·分布式·matlab·定位·导航·wsn
伏 念11 小时前
AI Coding 零基础实战教程
c语言·进程·预处理
你家人养牛11 小时前
OOC Relation Plugin:C 语言面向对象 开发的高效辅助工具
c语言·vscode
想你依然心痛11 小时前
嵌入式C代码规范:MISRA-C 2012核心规则解读——类型安全与未定义行为深度剖析
c语言·安全·代码规范
techdashen11 小时前
kTLS 进入 rustls 组织:把 TLS 的数据面交给内核
开发语言·php
Lhappy嘻嘻12 小时前
Java 并发编程(六)|并发进阶高频:CAS、锁升级
java·开发语言
techdashen12 小时前
Arborium:把 tree-sitter 语法高亮打包成 Rust 文档生态的基础设施
开发语言·后端·rust
会周易的程序员12 小时前
microLog 后端开发指南
开发语言·c++·物联网·设计模式·日志·iot·aiot