关于函数实现数值交换
2017-08-17 15:02
232 查看
#include <stdio.h> void swap0(int a ,int b) { printf(" a addr : %d , b addr: %d\n", &a , &b); int temp = a; a = b; b = temp; } int main() { int x=3 , y=5; printf(" x addr : %d , y addr: %d\n", &x , &y); printf(" x : %d , y : %d\n", x , y); swap0( x, y); printf(" x : %d , y : %d\n", x , y); return 0; }
运行结果:
x addr : 1703740 , y addr: 1703736
x : 3 , y : 5
a addr : 1703652 , b addr: 1703656
x : 3 , y : 5
Press any key to continue
表明:采用值调用方式无法交换实参的值,调用交换swap0导致实际参数x和y的值分别复制到形式参数a和b中,系统为形参a、b分配新的内存地址,故改变形参的值对实参无影响。在交换体内,a和b的值互换,函数终止。 终止后,a和b的新值不会被复制回实际参数。 因此,实际参数的值不受功能的影响。
#include <stdio.h>
void swap1(int *a , int *b)//使用指针方式修改指向内存块的值, 传值方式
{
printf(" a addr : %d , b addr: %d\n", &a , &b);
printf(" a memory block addr : %p , b memory block addr: %p\n", a , b);
int temp = *a;
*a = *b;
*b = temp;
printf(" a addr : %d , b addr: %d\n", &a , &b);
printf(" a memory block addr : %p , b memory block addr: %p\n", a , b);
}
int main()
{
int x=3 , y=5;
printf(" x addr : %d , y addr: %d\n", &x , &y);
printf(" x memory block addr : %p , y memory block addr: %p\n", &x,&y);
printf(" x : %d , y : %d\n", x , y);
swap1( &x, &y);
printf(" x : %d , y : %d\n", x , y);
return 0;
}运行结果:
x addr : 1703740 , y addr: 1703736
x memory block addr : 0019FF3C , y memory block addr: 0019FF38
x : 3 , y : 5
a addr : 1703652 , b addr: 1703656
a memory block addr : 0019FF3C , b memory block addr: 0019FF38
a addr : 1703652 , b addr: 1703656
a memory block addr : 0019FF3C , b memory block addr: 0019FF38
x : 5 , y : 3
Press any key to continue
可以发现:采用指针方式修改指向内存块的值时,也会为形参分配新的地址,但是形参指向的内存块的地址与实参相同,故对形参指向的内存块的值进行修改,实参指向的内存块的值即发生相同的改变,故可以完成值的交换。
#include <stdio.h>
void swap2(int &a , int &b)//使用引用方式,串引用方式
{
printf(" a addr : %d , b addr: %d\n", &a , &b);
int temp = a;
a = b;
b = temp;
}
int main()
{
int x=3 , y=5;
printf(" x : %d , y : %d\n", x , y);
printf(" x addr : %d , y addr: %d\n", &x , &y);
swap2(x , y);
printf(" x : %d , y : %d\n", x , y);
return 0;
}
运行结果:
x : 3 , y : 5
x addr : 1703740 , y addr: 1703736
a addr : 1703740 , b addr: 1703736
x : 5 , y : 3
Press any key to continue
可以发现:利用引用参数可以成功完成数值交换,调用swap2(x,y);则int &a=x;int &b=y; 那么a相当于x的别名,b相当于y的别名,交换a和b的值即相当于交换x和y的值。
注:引用是一种特殊类型的变量,我们可以认为它是另一个变量的别名,利用引用名和原来的变量名访问变量的效果是一样的。引用的形式是:类型标识符 &引用名。比如:
int i, j;
int &ri=i; // 建立一个int型的引用ri,并将其初始化为变量i的一个别名
j=10;
ri=j; // 相当于 i=j;
相关文章推荐
- 浅谈关于两个整数的交换函数的N种实现方式
- 第一次发博客,新手初试啊,题目如下:有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- 关于驱动开发中mmap函数的实现
- 写一方法来实现两个变量的交换。在主调函数中定义两个整型变量,并初始化,调用交换方法,实现这两个变量的交换。(使用ref参数)
- 函数实现两数组的交换
- 一些关于memcpy memmove函数的区别,和模拟实现
- 关于函数strtok和strtok_r的使用要点和实现原理
- 一连浪了好几天了,一直没好好的学习,希望在运动会结束后能够好好的认真学习,下面是关于栈的链表形式的有关函数的实现,与上一个实现形式有所差别
- 三种方法实现整型数值交换
- 关于函数strtok和strtok_r的使用要点和实现原理
- C_利用函数的引用调用实现两数的交换
- 关于float转int的函数实现
- 关于估价函数的实现-------基于python语言(网络爬虫)
- 关于javascript中变量是如何存储调用、以及函数的继承实现
- 使用函数实现两个数的交换。
- 指针实现两数交换和指向函数的指针
- Python 2.X-关于函数返回的数值类型
- 要求:不申请变量和空间 反转字符串 ,用一个函数实现。 异或^交换或者加减交换的典型应用! VIA 笔试题
- SQL Server中的RAND函数的介绍和区间随机数值函数的实现
- C语言实现两数交换函数