You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:09:23