【C语言】编写一个函数,实现两个数的交换 详细解答
程序员文章站
2024-01-20 16:22:46
...
今天在用函数写两数交换的时候发现有点小挫折,然后经过多次查找验证才发现是因为地址不对的缘故,我在此放出两种交换的方法,先发错误的如下:
那么,聪明的你肯定能想到,在swap()函数里变量a和b的地址肯定和main里a和b的地址是不同的,swap里的a,b的地址是指针的地址(在swap里a,b是指针),而它们的值是在main()里面a和b的地址;
#include <stdio.h>
void swap(int a,int b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a=4,b=5;
swap(a,b);
printf("a = %d ,b = %d\n",a,b);
return 0;
}
这段代码运行完以后会发现两个数不会交换;
显然,在两个函数里,它们的地址并不相同,这意味着,它们并不是相同的存储空间,改变swap里的值,实际上仅仅只改变了swap()里面的a和b的值罢了,一旦swap执行完,swap里的a和b的储存空间立即释放掉,对于main()里的a和b,没有半点影响。
那么接下来再放一段代码:
#include<stdio.h>
int swap(int*,int*); //指针的数据类型是盖住名字剩下的 所以如此声明
int main(){
int a = 0;
int b = 0;
printf("请输入两个数字:\n");
scanf("%d%d",&a,&b);
//直接运行交换方法 交换地址就是在交换他们的门的钥匙,然后a可以用b的钥匙在内存中找到b的值,b可以在内存中用a的钥匙去找b的值
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0 ;
}
int swap(int *a,int *b){
int temp;
temp =*a ;
*a= *b;
*b= temp;
}
我们分析一下它的原理,它究竟做了哪些变化呢,在swap函数里,我们将a和b的地址给了swap函数,作为形参,在swap函数中,a和b是指向两个int 类型的指针,它们接受了main里面a和b的地址,也就是a=&a (in main());b=&b (in main());所以对*a实际上就是对a(in main())操作啦; 那么,聪明的你肯定能想到,在swap()函数里变量a和b的地址肯定和main里a和b的地址是不同的,swap里的a,b的地址是指针的地址(在swap里a,b是指针),而它们的值是在main()里面a和b的地址;
上一篇: ES6-解构赋值
下一篇: Luogu 2530 化工厂装箱员
推荐阅读
-
【C语言】编写一个函数,实现两个数的交换 详细解答
-
C语言实现 用函数实现两个数的交换
-
C语言函数的参数传递实例:利用函数交换两个变量的值实现教程
-
用C语言编写函数实现一个整数计算机,程序接受三个参数,第一个参数为操作项,后两个参数为操作数。
-
c语言实现两个值互相交换的函数
-
C语言:计算字符串中子串出现的次数 程序说明:利用输入函数输入任意两个字符串,请你编写程序求出第二个字符串在第一个字符串中出现的次数,即在第一个字符串中有几个第二个字符串。
-
C语言函数的参数传递实例:利用函数交换两个变量的值实现教程
-
C语言实现 用函数实现两个数的交换
-
用C语言编写函数实现一个整数计算机,程序接受三个参数,第一个参数为操作项,后两个参数为操作数。
-
c语言实现两个值互相交换的函数