• 【郝斌C ST】指针 swap问题


    C语言 指针 swap问题

    在主函数种实现变量的交换

    现在我们把这交换的行为封装进方法中

    swap函数确实进行了交换,打印也是10和5了,但是下面a和b的结果还是5和10

    - 形参i 和 形参j 并不是和 a,b一个变量,实参 a,b 传递值给形参 i,j

    - 形参i 和 形参j ,还有temp变量,在内存也分配了空间,main函数跳转至swap函数开始执行

    - swap函数执行完毕,swap函数和内部的变量一并释放销毁,

    - i,j已经销毁,主函数的a,b 依然存在,最后一步打印的还是之前的a,b

    - swap函数交换的是这个函数内部的变量,并没有影响主函数的a,b!!!

    使用指针形参i 和 j

    传值也必须对应的是变量的地址

    对指针变量进行交换

    - a  值5 地址1001 ,b 值10 地址1002

    - 形参:指针变量 i 值收到 &a 1001,指针变量j 值收到 &b 1002 , 声明指针变量temp,

    - 三者交换完毕 指针变量 i 值1002,指针变量j 值1001

    - 但是a和b还是值5 地址1001 ,值10 地址1002

    - 这个问题还是一样,内部的指针变量确实交换了,但是方法结束之后有影响到主函数的a,b了吗?并没有!!!

    - 指针变量 i 和 j 收到 a 和 b 的地址

    - 把 指针i 的地址反引用获取该值【地址值】存储的值,赋值给 变量temp,这个类型是int 类型,不是int指针类型!!!

    - 把 指针j 的地址反引用获取该值【地址值】存储的值 ,赋值给 反引用的 i【*i】

    - 把 temp 变量的值,赋值给 反引用的 j【*j】

    - 我们这样就对主函数的a变量 和 b变量的值进行了交换

    - a 变量的地址 给了指针 i ,i 可以通过*i 操作修改 a变量的值,

    也就是说 *i 指向了变量a 的值,变量a可以操作这个值,*i也可以操作

    * 的用法:

    - 单作操作符,用于相乘运算符

    - 定义指针变量  int * p 定义了一个int指针类型变量,标识符是p,p只能存放int类型变量的地址,

    - 指向运算符,*p指向了该地址存储的值

    #include <stdio.h>
    
    void swap(int * i,int * j){
        int temp = *i;
        *i = *j;
        *j = temp;
    }
    
    int main() {
        int a = 5;
        int b = 10;
        printf("a = %d, b = %d \n",a,b);
        swap( &a, &b );
        printf("a = %d, b = %d \n",a,b);
        return 0;
    }

    《郝斌C语言 自学》 P127 - P129

    https://www.bilibili.com/video/BV1os411h77o

  • 相关阅读:
    【以前的空间】poj 2288 Islands and Bridges
    【以前的空间】网络流合集
    【以前的空间】 单调队列系列
    【以前的空间】几道平衡树
    【以前的空间】vijos 1720 阿狸的打字机
    对拍程序
    【Ubuntu】编写一个c语言代码
    用Matlab对数据进行线性拟合算法
    Oracle视图传递参数
    oracle decode的用法
  • 原文地址:https://www.cnblogs.com/mindzone/p/12765345.html
Copyright © 2020-2023  润新知