• C语言的swap函数的易错点


    程序一:交换值

    #include <stdio.h>
    void swap(int *x , int *y){
        int *temp;
        temp = x;
        x = y;
        y = temp;
    }
    void main(){
        int a = 1;
        int b = 2;
        swap(&a , &b);
    }

    对于程序一,在它运行完成之后,a,b的值并没有发生变化。
    原因是swap函数里面的x,y都是形参,函数里面对形参的地址进行了交换,这并没有交换main函数中的a,b这两个变量指向的地址。

    程序二:交换值

    #include <stdio.h>
    void swap(int *x , int *y){
        int *temp;
        temp = x;
        x = y;
        y = temp;
    }
    void main(){
        int *a = 1;
        int *b = 2;
        swap(a , b);
    }

    程序二也不能交换a,b所指向的值,原因类似于程序一的错误原因。

    程序三:交换值

    #include <stdio.h>
    void swap(int x , int y){
        int temp;
        temp = x;
        x = y;
        y = temp;
    }
    void main(){
        int a = 1;
        int b = 2;
        swap(a , b);
    }

    程序三运行完之后,a,b的值也没有发生交换,是因为swap函数中的形参x,y发生了值的交换,而并不是main中实参的值交换。

    程序四:交换字符串

    #include <stdio.h>
    void swap(char **x , char **y){
        char *temp;
        temp = *x;
        *x = *y;
        *y = temp;
    }
    void main(){
        char *a = "china";
        char *b = "hello";
        swap(&a , &b);
    }

    程序四可以交换两个字符串,其原理如下图所示:

    程序五:交换字符串

    #include <stdio.h>
    #include <string.h>
    void swap(char *x , char *y){
        char temp[10];
        strcpy(temp,x);
        strcpy(x,y);
        strcpy(y,temp);
    }
    void main(){
        char a[10] = "china";
        char b[10] = "hello";
        swap(a , b);
    }

    程序五也可以交换两个字符串,运用到了strcpy函数。

  • 相关阅读:
    python爬取网页
    python异常处理
    本周总结
    改变promise状态有三种resolve、reject、throw
    详解Promise.race()可以解决多个异步请求那个请求先返回
    Promise.all()方方详解
    你不知道的Promise构造函数Promise(excutor)
    你不知道的Promise状态变化机制
    Promise练习文件读取
    关于async函数的错误处理
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/12625700.html
Copyright © 2020-2023  润新知