pcahyh 2023-09-23 20:38 采纳率: 66.7%
浏览 4

C语言形参地址在经过互换后数值为什么没有改变


#include <stdio.h>

void swap(int** a, int** b) {
    int* temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 1, y = 2;
    int* px = &x;
    int* py = &y;

    swap(&px, &py);

    printf("After swap: px = %d, py = %d\n", *px, *py);
    printf("After swap: x = %d, y = %d\n", x, y);
    return 0;
}


img


img


为什么x,y的地址已经进行了调换,但是从输出的结果来看x,y仍然没有改变?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-23 20:50
    关注

    引用 皆我百晓生 小程序回复内容作答:

    在函数swap中,形参a和b是指向指针的指针,即二级指针。在函数内部,通过对a和b的操作,实际上是交换了指针px和py的值,即交换了它们指向的地址。

    但是在函数外部,变量x和y的值并没有发生改变。因为在函数swap中,只是交换了指针的值,并没有改变指针所指向的内存空间的值。所以,虽然指针px和py的值发生了交换,但是它们仍然指向原来的内存空间,即x和y的地址。

    因此,通过px和py访问的仍然是原来的x和y的值,所以输出结果中x和y的值没有发生改变。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月23日

悬赏问题

  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 NRF24L01能发送但是不能接收
  • ¥15 想问一下这种情况怎么解决呢(关键词-file)
  • ¥15 python Flassk 模块部署 服务器时报错
  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存