·
#include __FILE__

没什么其他方法了,你几乎已经列举完了,C语言的语法就只有这么多,怎么操作也离不开变量和指针还有函数,那个题目的意思应该就是想让你使用指针在函数间传值

还有第三种方法实际上并没有很好,看似不需要创建临时变量,实际上代码可读性并没有很好,性能也一般,普适性也差,在编译器开启优化的前提下,方法一创建的临时变量能直接被优化掉,直接使用寄存器交换变量,在一些场景下性能优于方法二和方法三

一种比较hack的方法是,直接交换要输出的变量位置就好了printf(xx,a,b)->printf(xx,b,a),什么交换变量都是不存在的

不过C++标准库中有个很好的方法(只能在C++中使用),std::swap,利用移动语义避免了临时变量的构造开销(对基本类型来说没什么差别),使用起来比较优雅,如果你以后学C++的话可以看看

还有就是Python交换变量的写法,相当漂亮,x,y = y,x

Replies
5

方法二创建的临时变量也可以优化掉吧,CPU将*i和*j取到两个寄存器中,然后交换地写入内存。即使是出现了内存别名使用的情况,函数执行的结果也是正确的

你说得对,我满脑子都是不优化的场景,想着方法二还有函数调用开销,但实际上三个都可以优化函数也能inline掉,开启-O1后的结果几乎一模一样,现代编译器还是很强大的

嗯嗯,看到大佬的指点真的感觉很棒,非常有趣 smile 很喜欢你的那个hack方法,太牛XX了 +1 有打算学C++, python这方法是真的漂亮,以前有学过一些Python。感谢 pray

哈哈哈,我能请教一下你们说的优化是啥意思吗 sweat_smile (尴尬了);还有就是 开启 -01 又是个啥,求指导 pray

O是optimization的缩写,不是0,MSVC比较奇葩是这样的/O 选项(优化代码) | Microsoft Docs,GCC、Clang都是-