C语言中两种指针实现整数交换的方法:哪种更优?
两种指针实现整数交换方法的区别与优劣
先看你给出的两种代码:
方法1(temp为指针)
void Swap(int *a, int *b) { int *temp = a; *a = *b; *b = *temp; }
方法2(temp为普通整数)
void Swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }
核心区别
- temp的类型与存储内容:方法1的
temp是指针,存的是a的内存地址;方法2的temp是普通整数,直接存a指向的整数值。 - 操作路径:方法1需要通过指针地址的解引用完成值传递,相当于绕了一层地址的弯路;方法2直接操作数值,逻辑更直接。
哪种更优?
毫无疑问是方法2,原因如下:
- 可读性更强:方法2完全符合常规的“存原值→覆盖→回写”交换逻辑,一眼就能看懂;方法1用指针存地址再解引用,逻辑绕圈,容易让人误解是交换指针本身(但实际不是)。
- 性能更优:虽然现代编译器会做优化抹平微小差异,但从代码逻辑上看,方法1多了一次指针地址的存储和解引用操作,没必要多这层开销。
- 写法更标准:方法2是C语言中交换两个整数的标准写法,几乎所有教材和项目里都会这么写;方法1属于小众且没必要的写法,没有任何场景需要优先用它。
总结:方法1能实现功能,但属于冗余写法,方法2才是正确且最优的选择。
内容的提问来源于stack exchange,提问作者Bar
相关产品推荐
相关产品推荐

