C语言中,函数的参数可以是整型,实型,字符型,指针类型;如果用指针做为函数参数传到被调用函数的话,可以实现使变量的值发生变化,在主调函数(例如:main函数中)使用这些已经改变了的值的目的。先看段代码吧

#include <stdio.h>
swap(int *a,int *b)
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
main()
{
int a,b;
int *p1,*p2;
printf("请输入两个数据用于交换:");
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("\n不用第三方变量的交换结果是:%d,%d\n",a,b);
}
swap(int *a,int *b)
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
main()
{
int a,b;
int *p1,*p2;
printf("请输入两个数据用于交换:");
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("\n不用第三方变量的交换结果是:%d,%d\n",a,b);
}
这是一段经典的C语言中不使用临时变量实现两个变量交换的代码。在main函数中定义了两个整型变量,两个指针变量,并使p1=&a,p2=&b;然后调用swap函数,看结果吧
已经实现了两个数的交换 。
然后把swap函数改一下,改成如下:
swap(int *a,int *b)
{
int *temp;
*temp=*a;
*a=*b;
*b=*temp;
}
{
int *temp;
*temp=*a;
*a=*b;
*b=*temp;
}
改成这样子之后就报错了。。究其原因是因为指针变量temp无确定地址,它的值是不可预见的。。
当把函数改为这样子的时候也是不行的。
swap(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
{
int temp;
temp=a;
a=b;
b=temp;
}
调用这个版本的函数,形参a,b的值是改变了,但主调函数却使用不了改变后的值。。
下面的写法就可以在主调函数中使用改变后的值了。
swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
C语言的指针用法太灵活了,代码在书写过程中也没有注意编码规范。或许写得有点乱。就请看到的网友见谅吧。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库