【面试宝典】写一个函数将两个数交换

没有参加过面试的同学可能会很忐忑,面试都会出些什么题呢?其实一般情况下,大部分的面试题都是比较基础的。关于如何交换两个数字,应该是非常简单的问题了。看下面几个函数,那几个函数能完成交换两个数字的功能呢?大家可以先不看答案,自己思考下看看。

void swap1(int p, int q)

{

int temp;

temp = p;

p = q;

q = temp;

}

void swap2(int *p, int *q)

{

int *temp;

*temp = *p;

*p = *q;

*q = *temp;

}

void swap3(int *p, int *q)

{

int *temp;

temp = p;

p = q;

q = temp;

}

void swap4(int *p, int *q)

{

int temp;

temp = *p;

*p = *q;

*q = temp;

}

void swap5(int &p, int &q)

{

int temp;

temp = p;

p = q;

q = temp;

}

int main(void)

{

int a = 1, b = 2;

swap1(a, b);

swap2(&a, &b);

swap3(&a, &b);

swap4(&a, &b);

swap5(a, b);

return 0;

}

怎么样,看完后你认为的正确答案是什么呢?我们来逐个分析下。

总的来说,这个题考查的是函数参数传递,值传递,地址传递,引用传递。

先看第一个,swap1传的是值得副本,也就是说在函数内部,p,q的值确实交换了,但是他们是局部变量,不会影响到主函数的a,b。当swap1返回时,p、q也就被删除了。所以swap1是不能完成a、b的值的交换的。

swap2传的是一个地址过去,但是指针temp并没有初始化(没有分配内存),*temp = *p是不合法的。

swap3也是传一个地址过去,本来p指向a的地址,q指向b的地址,在函数返回的时候p指向b的地址,q指向a的地址,看似p、q的地址交换了,*p、*q的值也交换了,但是对于a、b来说并没有任何变化。

swap4可以实现值得交换,它修改了指针所指向地址的值的值,也就是实参的值。

swap5和swap4类似,这是一个引用传递。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2016-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏喵了个咪的博客空间

zephir-(10)内置函数

#zephir-内置函数# ? ##前言## 先在这里感谢各位zephir开源技术提供者 嗨!大家好呀,今天要和大家一同学习zephir的内置函数,学过PHP的...

3658
来自专栏python学习之旅

Python笔记(七):字典、类、属性、对象实例、继承

(一)  简单说明    字典是Python的内置数据结构,将数据与键关联(例如:姓名:张三,姓名是键,张三就是数据)。例如:下面这个就是一个字典 {'姓名':...

3835
来自专栏信数据得永生

JavaScript 编程精解 中文第三版 三、函数

3317
来自专栏CaiRui

Python之‘数据结构’

简介 数据结构基本上就是--它们是可以处理一些数据的结构。或者说,它们是用来存储一组相关数据的。在Python里面有三种内建的数据结构--列表、元组和字典。 一...

1998
来自专栏大数据和云计算技术

由快速排序到分治思想

算法是基础,小蓝同学准备些总结一系列算法分享给大家,这是第一篇《由快速排序到分治思想》,非常赞!希望对大家有帮助,大家会喜欢! 快速排序是一种基于分治思想...

3496
来自专栏一名合格java开发的自我修养

java或判断优化小技巧

写业务代码的时候,我们经常要做条件判断,有的时候条件判断的或判断长达20多个。reg.equals("1") || reg.equals("2") || reg...

621
来自专栏程序员互动联盟

【专业知识】 Webkit智能指针用法

历史: 在WebKit中,许多对象采用了引用计数。这种模式是通过类的ref,deref成员函数来递增和递减对象的引用记数。调用一次ref必须调用一次der...

35715
来自专栏MyBlog

Effective.Java 读书笔记(8)关于equals方法

重写equals看上去十分简单对吧,但是我觉得很多时候重写equals可能会招致一些问题,这些问题有时可能会特别严重,当然了不重写不就完事了吗?但是这只适用于那...

854
来自专栏诸葛青云的专栏

想当黑客?浅谈C语言编程:不会这个知识就别想了!

看到标题点进来的朋友,应该对黑客这个名词很敏感吧?我想应该是这样的,但是你们知道作为一名黑客需要学习哪些知识吗?小编不是什么大佬,但小编可以明确的告诉你,学习C...

2340
来自专栏coding for love

JS入门难点解析9-闭包的深入解析

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

652

扫码关注云+社区

领取腾讯云代金券