编写函数实现对两个变量的值进行交换
2018-04-07 17:25
204 查看
子函数的改变要想修改父函数的值,必须要:
1、传指针 2、解引用
#include <stdio.h>
void Swap_eer1(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
该函数采用值传递方式,是单向传递,实参变量和形参变量分别占用不同的存储单元,改变形参变量的值不会影响实参变量的值,故该函数不能实现对两个变量值的交换。
void Swap_err2(int *p1,int *p2)//有传指针,但是没有解引用
{
int *tmp=p1;
p1=p2;
p2=tmp;
}
该函数采用指针传递方式,在该函数中交换的是两个指针形参变量的值,而不是两个指针形参变量所指向的存储单元的值,因此不能影响父函数中变量的值,故该函数不能实现对两个变量值的交换。
void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针,悬挂指针
*tmp=*p1;
*p1=*p2;
*p2=*tmp;
}
该函数采用指针传递方式,是双向传递。理论上能实现两个变量值的交换,但是该函数中应用了指针变量tmp所指向的存储单元作为中间变量,未对指针变量tmp进行初始化,tmp为野指针,它的值为随机值。若tmp指向系统区,改变tmp所指向存储单元的值,有可能造成系统混乱。因此,此函数的设计不可取。
#include <stdio.h>
void Swap(int *p1,int *p2)
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
/*该函数采用指针传递方式,是双向传递,通过改变形参指针变量所指向的存储单元(即父函数中的变量)的值,从而影响父函数中变量的值,故该函数能实现了两个变量值的交换*/
int main()//调用函数,父函数
{
int a=10;
int b=20;
Swap(&a,&b);//被调用函数,子函数
printf("a=%d,b=%d\n",a,b);
return 0;
}
调试结果:
1、传指针 2、解引用
#include <stdio.h>
void Swap_eer1(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
该函数采用值传递方式,是单向传递,实参变量和形参变量分别占用不同的存储单元,改变形参变量的值不会影响实参变量的值,故该函数不能实现对两个变量值的交换。
void Swap_err2(int *p1,int *p2)//有传指针,但是没有解引用
{
int *tmp=p1;
p1=p2;
p2=tmp;
}
该函数采用指针传递方式,在该函数中交换的是两个指针形参变量的值,而不是两个指针形参变量所指向的存储单元的值,因此不能影响父函数中变量的值,故该函数不能实现对两个变量值的交换。
void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针,悬挂指针
*tmp=*p1;
*p1=*p2;
*p2=*tmp;
}
该函数采用指针传递方式,是双向传递。理论上能实现两个变量值的交换,但是该函数中应用了指针变量tmp所指向的存储单元作为中间变量,未对指针变量tmp进行初始化,tmp为野指针,它的值为随机值。若tmp指向系统区,改变tmp所指向存储单元的值,有可能造成系统混乱。因此,此函数的设计不可取。
#include <stdio.h>
void Swap(int *p1,int *p2)
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
/*该函数采用指针传递方式,是双向传递,通过改变形参指针变量所指向的存储单元(即父函数中的变量)的值,从而影响父函数中变量的值,故该函数能实现了两个变量值的交换*/
int main()//调用函数,父函数
{
int a=10;
int b=20;
Swap(&a,&b);//被调用函数,子函数
printf("a=%d,b=%d\n",a,b);
return 0;
}
调试结果:
相关文章推荐
- 编写函数实现对两个变量的值进行交换
- C语言实现 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。
- 1. 给定两个整形变量的值,将两个值的内容进行交换。 2. 不允许创建临时变量,交换两个数的内容(附加题) 3. 求10 个整数中最大值。 4. 写一个函数返回参数二进制中 1 的个数
- 编写一个函数,用于交换两个变量的值
- 用C语言实现给定两个整形变量的值,将两个值的内容进行交换。(4种方法)
- 写一方法来实现两个变量的交换。在主调函数中定义两个整型变量,并初始化,调用交换方法,实现这两个变量的交换。(使用ref参数)
- java中把两个变量进行值交换,通过异或两次运算就能实现值互换。
- 使用位运算实现判断一个数是否是2的n次方,实现不需要中间变量进行两个变量值的交换
- 1. 给定两个整形变量的值,将两个值的内容进行交换。 2. 不允许创建临时变量,交换两个数的内容(附加题) 3. 求10 个整数中最大值。 4. 写一个函数返回参数二进制中 1 的个数
- 17.1---编写一个函数交换两个变量的值(CC150)
- java 编写函数 交换两个基本变量的值
- C语言 实现 给定两个整形变量的值,将两个值的内容进行交换
- 9.2.利用函数swap用函数编程实现两个数组中对应元素值的交换。
- 常见面试题,交换两个整形变量不用中间变量怎样实现?
- 不用额外空间实现两个变量(int 型)的交换
- C语言实现两个整形变量的值的交换,不使用临时变量
- 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。
- 如何在不使用第三方变量的前提下,交换两个变量的值 (Java实现)
- C++ 编写函数重置两个变量的值
- 【转】 不用中间变量,实现两个变量的交换