网上看到的一篇文章加深了对指针的了解,收藏一下

自定义的swap函数是一个老掉牙的问题,而这个问题对于理解指针和内存中的栈是很有帮助的

一般自定swap函数是这样的:

1.swap函数的功能是实现两个的相互替换

2.在main函数中调用swap函数,以实现main栈中两个数的相互替换

void swap1(int x, int y)

{//当swap1传入的是整形变量时,swap1栈中会开辟了2个整形变量副本,当swap1运行结束时,swap1栈会销毁,所以这两个副本也会销毁。这时,swap1里面的任何操作对man函数栈中的a,b是没有任何作用的,所以是不能交换的

Int temp;

temp = x;

X = y;

Y = temp;

}

void swap2(int *x, int *y)

{//这里边很多人可能就不能理解了!在main栈中,&a指向4的地址,&吧指向5的地址,Swap2函数在swap2栈中定义了两个整形变量指针x,y;一开始x 指向 4的地址,y指向5的地址,函数运行完最后一步时(swap2栈还没销毁前),x指向5的地址,y指向4的地址,这时*x和*y值交换是成功的。但是这种交换并没有改变main栈中&a和&b的指向,&a依然指向的是4的地址,&b依然指向的是5的地址。简单总结一下就是,swap2函数只是交换了x和y的指向的地址,却并没有影响到&a和&b指向的地址

Int *temp;

temp = x;

X = y;

Y = temp;

}

void swap3(int *x, int *y)

{//在main栈中,&a指向4的地址,&吧指向5的地址,Swap2函数在swap2栈中定义了两个整形变量指针x,y;一开始x 指向 4的地址,y指向5的地址。也就是说&a和x指向同一个地址,&b和y指向同一个地址!函数运行完最后一步时(swap2栈还没销毁前),x和y把自己指向的地址的值改变了,这时候的改变就影响到了main栈中&a和&b指向的地址的值,所以交换就成功了

Int temp;

temp = *x;

*x = *y;

*y = temp;

}

Void swap4(int *x, int *y)

{//这个程序运行时是会报段错误的,因为temp没有初始化指针,但是却马山用了它,这是很危险的

Int *temp;

*temp = *x;

*x = *y;

*y = *temp;

}

Int main(void)

{

Int a = 4;

Int b = 5;

swap1(a, b);

Swap2(&a, &b);

Swap3(&a, &b);

return 0;

}

void Swap1(int &a,int &b){
int t;

t=a;
a=b;
b=t;
}

 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

  引用的声明方法:类型标识符 &引用名=目标变量名;

  【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

所以对引用的操作就是对传入变量的操作。

转载:https://blog.csdn.net/duan_jin_hui/article/details/50879338?utm_source=copy

自定义Swap的更多相关文章

  1. C++中swap函数

    本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的.个人水平有限,若有错误的地方,欢迎留言指出.谢谢! 一.通用的函数交换模板 template<class T> voi ...

  2. 单机搭建Android开发环境(二)

    前文介绍了如何优化SSD和内存,以发挥开发主机的最佳性能,同时提到在SSD上创建虚拟机.为什么不装双系统呢?双系统性能应该会更好!采用Windows+虚拟机的方式,主要是考虑到安卓开发和日常办公两方面 ...

  3. C++ Primer 笔记——拷贝控制

    1.如果构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数.拷贝构造函数的第一个参数必须是引用类型(否则会无限循环的调用拷贝构造函数). 2.如果没有为一个类 ...

  4. docker容器资源配额控制

    转自:http://blog.csdn.net/horsefoot/article/details/51731543 文/ 天云软件 容器技术团队 Docker通过cgroup来控制容器使用的资源配额 ...

  5. docker容器资源配额控制_转

    转自:docker容器资源配额控制 ■ 文/ 天云软件 容器技术团队 docker通过cgroup来控制容器使用的资源配额,包括CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. cg ...

  6. 高效C++:设计与声明

    C++软件开发可以理解为设计一系列的类,让这些类相互使用,最终实现我们所需要的功能.类与类之间的相互关系可以很复杂,也可以很简单,如何简单高效的描述类与类之间的关系是设计的难点之一.遵循本文所提供的方 ...

  7. 【c++ Prime 学习笔记】第13章 拷贝控制

    定义一个类时,可显式或隐式的指定在此类型对象上拷贝.移动.赋值.销毁时做什么.通过5种成员函数实现拷贝控制操作: 拷贝构造函数:用同类型的另一个对象初始化本对象时做什么(拷贝初始化) 拷贝赋值算符:将 ...

  8. 安装Ubuntu时,遇到自定义交换空间swap大小设置问题

    【整理】Ubuntu自定义分区设置 在安装Ubuntu时,如果使用的是一个新硬盘那么安装向导会建议你使用整个硬盘,如果硬盘上已经有数据了,向导会建议使用剩余的空间。不管怎样,是由向导自动划分的分区。 ...

  9. 【原创】C++之自定义高效的swap(1)

    1 问题背景     当交换两个包含了指针成员的类,我们最想看到的是直接交换其指针.但是当我们调用std::swap标准库这个模板函数时,通常它都会复制3个指针指向的对象作为交换所用,缺乏效率.如下: ...

随机推荐

  1. Java中Iterator的fast-fail分析

    1.fail-fast简介 fail-fast机制是java集合(Collection)中的一个错误机制.当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件. 例如:当某一个线 ...

  2. long_query_time 设置不生效问题

    由于原来的慢查询日志太大了,有1G多,并且其中包含上一次查询优化前的慢sql,所以想收集最近两天的慢查询语句,故 mysql> show global variables like 'slow% ...

  3. ruby 正则表达式

    Ruby学习笔记-正则表达式 Posted on 2011-11-29 17:55 Glen He 阅读(4998) 评论(0) 编辑 收藏 1.创建正则表达式 a) reg1 = /^[a-z]*$ ...

  4. tmux基本使用方法

    tmux是一款优秀的终端复用软件.tmux采用C/S模型构建,输入tmux命令就相当于开启了一个服务器,此时默认将新建一个会话,然后会话中默认新建一个窗口,窗口中默认新建一个面板. 一个tmux se ...

  5. 郝健: Linux内存管理学习笔记-第2节课【转】

    本文转载自:https://blog.csdn.net/juS3Ve/article/details/80035753 摘要 slab./proc/slabinfo和slabtop 用户空间mallo ...

  6. 如何让你的手机U盘集PE工具、系统安装、无线破解等众多功能于一身

    不久前,手里的U盘坏了,于是乎,又在网上淘了一个Type-C U盘,刚好手机电脑都可以用. 那么现在U有了,我们要做什么呢? 第一:让U盘插在手机上时,可以供手机读写,实现手机存储扩容,随插随用,简单 ...

  7. 最短路径问题----Dijkstra算法的解释

    先上图: 现在要找到地点V1到其余各个地点的最短路径(图中数字的单位默认为km.).有一个原则是:永远找最小,确保无更小. 第一步:v1->v1,v1->v2,...v1->v7的距 ...

  8. HDU 4405 Aeroplane chess:期望dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意: 你在下简化版飞行棋... 棋盘为一个线段,长度为n. 上面有m对传送门,可以直接将你从a ...

  9. TP框架入门基础

    ThinkPHP目录: ThinkPHP主目录文件夹: Conf文件夹: Library文件夹: Library=>Think文件夹:

  10. PostgreSQL与Oracle对应的函数

    一.对应的函数 1.sysdate oracle pgsql sysdate current_date. current_timestamp nvl coalesce  trunc date_trun ...