J_X_W_Q 2023-12-26 13:33 采纳率: 64.3%
浏览 7
已结题

c语言,指针变量,交换,函数

#include<stdio.h>
void swap(int *a, int*b)
{
    int*temp = a;
    a = b;
    b = temp;
}
int main()
{
int x = 10, y = 5;
printf("运算前:\nx=%d,&x=%p;y=%d,&y=%p\n", x, &x, y, &y);
swap4(&x, &y);
printf("运算后:\nx=%d,&x=%p;y=%d,&y=%p\n", x, &x, y, &y);
}

请问为什么这个函数不能做到,x,y值的交换,还有x,y地址的交换

img

  • 写回答

2条回答 默认 最新

  • 木易_ 2023-12-26 13:40
    关注

    这个函数不能做到x,y值的交换和x,y地址的交换,是因为在swap函数中,交换的是指针a和b的值,而不是a和b指向的变量的值。在函数内部,a和b指向的是原始x和y的地址,但是当形参a和b被重新赋值后,它们只是指向了另外一个地址,而原始x和y的值并没有发生改变。

    要实现x,y值的交换,应该在swap函数中修改指针a和指针b所指向的变量的值,而不是交换它们的值。可以通过指针间接引用的方式来实现:

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

    要实现x,y地址的交换,需要使用二级指针。可以在swap函数中定义一个二级指针,将其指向a和b的指针,然后交换二级指针所指向的地址

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

    在main函数中调用swap函数时,需要传递x和y的地址的地址:
    swap(&(&x), &(&y));

    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月3日
  • 已采纳回答 12月26日
  • 创建了问题 12月26日

悬赏问题

  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数
  • ¥15 llama3中文版微调
  • ¥15 pg数据库导入数据序列重复
  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)