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

为何C语言中用指针交换变量值的第二种方法无效?

为什么第二种指针交换方法无法改变原始变量的值?

先看第一种可以正常完成值交换的实现:

void interchange_values(int *first_number_pointer, int *second_number_pointer) {
   
    int temporal_variable;

    temporal_variable = *first_number_pointer;
    *first_number_pointer = *second_number_pointer;
    *second_number_pointer = temporal_variable;

};

这个方法能生效,是因为它通过*操作符直接操作指针指向的内存地址中的数据——也就是原始变量本身的存储位置,修改的是目标变量的实际值。

再看无法实现交换的第二种方法:

void interchange_values(int *first_number_pointer, int *second_number_pointer) {
     
    int *temporal_ptr = first_number_pointer;
    first_number_pointer = second_number_pointer;
    second_number_pointer = temporal_ptr;
};

它失效的核心原因是C语言的函数参数采用值传递机制:

  • 当你把原始指针传入函数时,函数会创建两个独立的指针参数副本,这两个副本和原始指针存储了相同的内存地址,但它们是完全独立的变量。
  • 函数内部交换的只是这两个副本的指向,并没有触碰原始指针本身,更没有修改指针指向的内存中的数据。
  • 当函数执行完毕后,这两个参数副本会被销毁,原始指针和它们指向的变量都不会有任何变化。

简单来说,第二种方法只是在函数内部交换了“指针的副本”,根本没碰要交换的原始变量,自然无法实现值交换。

内容的提问来源于stack exchange,提问作者Jesus Fragoso Jimenez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:39:53