前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【面试宝典】写一个函数将两个数交换

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

作者头像
程序员互动联盟
发布2018-03-16 11:03:04
7520
发布2018-03-16 11:03:04
举报
文章被收录于专栏:程序员互动联盟
没有参加过面试的同学可能会很忐忑,面试都会出些什么题呢?其实一般情况下,大部分的面试题都是比较基础的。关于如何交换两个数字,应该是非常简单的问题了。看下面几个函数,那几个函数能完成交换两个数字的功能呢?大家可以先不看答案,自己思考下看看。

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类似,这是一个引用传递。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档