解答问题之交换两个变量的值 描述:输入a=x b=y后 输出为a=y b=x

第一次作答:

#include<stdio.h>
void change(int x,int y)
{
    //交换
    x = y;
    y = x;
}
int main()
{
    int a,b;
    scanf("%d %d", &a, &b);
    printf("交换前,a=%d b=%d", a, b);
    change(a, b);
    printf("交换后,a=%d b=%d", a, b);
    return 0;
}

问题一: 操作之交换部分(函数内)

两个变量的值相互交换,不能直接交换,需要使用一个临时变量来辅助交换操作。

就比如一瓶可乐(瓶子一)和一瓶雪碧(瓶子二) 要相互交换瓶子  得先将其中一瓶饮料倒入别的空瓶子(瓶子三)中,比如先将瓶子一倒入瓶子三中,将瓶子二倒入瓶子一后,再将瓶子三倒入瓶子二,才完成操作。

故:

#include<stdio.h>
//x为瓶子一  y为瓶子二 c为瓶子三
void change(int x,int y) 
{
    //交换
    int c; 
    c=x; //先将瓶子一倒入瓶子三中,此时瓶子一空
    x=y; //将瓶子二倒入瓶子一中,此时瓶子二空
    y=c;//再将瓶子一的饮料从瓶子三中倒入瓶子二中
}
int main()
{
    int a,b;
    scanf("%d %d", &a, &b);
    printf("交换前,a=%d b=%d", a, b);
    change(a, b);
    printf("交换后,a=%d b=%d", a, b);
    return 0;
}

问题二:

补充概念:

主函数里的值为实参  子函数里的值为形参,当实参传递到子函数时,形参实例化后(函数被调用时)为实参的一份临时拷贝,各自具有独立的空间,所以修改形参不会影响实参

方案:

由于函数被调用时形参是实参的一份拷贝,各自独立;那可以通过指针来建立联系,即将a和b的内存地址传递到子函数中,子函数中就可以通过*解引用符,就可以引用到外部变量a和b与其建立联系,从而修改实参(a和b)

解答:

#include<stdio.h>
//x为瓶子一  y为瓶子二 c为瓶子三
void change(int *x, int *y)
{
    //*x引用外部变量a *y引用外部变量b
    //交换
    //*为解引用操作符,通过指针变量x所储存的地址,找到x所对应的变量,并引用它,*x所对应的变量是a
    int c = *x; //先将瓶子一倒入瓶子三中,此时瓶子一空
    *x = *y; //将瓶子二倒入瓶子一中,此时瓶子二空
    *y = c;//再将瓶子一的饮料从瓶子三中倒入瓶子二中
}
int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    printf("交换前,a=%d b=%d\n", a, b);
    change(&a, &b);//将变量a和b的地址带入函数中,分别由int *x=&a和int *y=&b储存
    printf("交换后,a=%d b=%d\n", a, b);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值