c基础 - 题目:用两种方法对两个值进行交换

2019-03-02  本文已影响0人  世道无情

前言

变量:就是给内存地址取一个别名;

1. 概述

这里写一个题目:用两种方法对两个值进行交换

方法一:定义中间变量temp,让两个值进行交换,思路如下:
    1.  在 main() 方法中定义两个int类型的变量:int a = 100 ,int b = 200 ;
    2.  在 main() 方法中的 change(&a,&b) 需要传递 ab的地址;
    3.  在 main() 方法上边写一个 change(int* a,int* b)方法,用于交互ab的值,这里的 a和b已经是地址了,
        相当于 a=&a,b=&b ;
    4.  而 *a = *b:表示:对a的地址取值 = 对b的地址取值;

    这样,就实现了ab两个值的交换:结果为 200  100;

方法二为面试题
方法二:不能开辟额外内存,意思就是不能用中间变量,交换两个值,思路如下:
    // 交换
    a = a + b; // a = 100 + 200 = 300
    b = a - b; // b = 300 - 200 = 100 
    a = a - b; // a = 300 - 100 = 200 
2. 代码如下

1>:方法一:定义中间变量temp,代码如下:
#include<stdio.h>  // 导入头文件,头文件都是方法的声明。

// 这里用 int类型的指针 int* 接收传递过来的两个地址,此时的 a和b已经是两个地址了
void change(int* a , int* b){
    int temp = *a;
    *a = *b; // 对a的地址取值 = 对b的地址取值 
    *b = temp;
}
void main(){
    int a = 100;
    int b = 200;

    // 交换:这里直接传递ab的地址
    change(&a , &b);
    printf("交互后ab的值分别是:%d,%d",a,b);  // 200 100

    getchar();
}
2>:方法二:不能开辟额外内存,意思就是不能用中间变量,代码如下:
#include<stdio.h>  // 导入头文件,头文件都是方法的声明。

void main(){
    int a = 100;
    int b = 200;

    // 交换
    a = a + b; // a = 100 + 200 = 300
    b = a - b; // b = 300 - 200 = 100 
    a = a - b; // a = 300 - 100 = 200 
    printf("交互后ab的值分别是:%d,%d", a, b);  // 200 , 100
    getchar();
}
3. 注意事项:

选中方法,右键,转到声明,可以看到该方法的返回值,以及需要传递的参数

上一篇 下一篇

猜你喜欢

热点阅读