intercambiar dos números

#include <stdio.h>

//swap1由于这种方式改变不了由编译器所分配的内存地址,所以a, b的值还是不能改变,仅仅交换了副本的地址

void swap1(int *a, int *b)

{

    int *temp;

    temp = a;

    a = b;

    b = temp;

}



void swap2(int *a, int *b)

{

    int temp;

    temp = *a;

    *a = *b;
    
    *b = temp;

}

//对于swap3,不能实现交换的理由是,C语言中函数的传的是形参,也就是一个副本,虽然在函数内体内交换了,但对真实的数据没影响。

void swap3(int a, int b)

{

    int temp;

    temp = a;

    a = b;

    b = temp;



}



int main()

{

    int a = 6;

    int b = 5;

    printf("before swap\n");

    printf("a=%d\nb=%d\n", a, b);
    
    printf("after swap\n");

    swap1(&a, &b);

    printf("a=%d\nb=%d\n", a, b);

    system("pause");

    return 0;

}

 

La transferencia de valor entre la variable de parámetro real y la variable de parámetro formal en lenguaje C es una "transferencia de valor" unidireccional, y el valor de la variable de puntero de parámetro real no se puede cambiar ejecutando la función de llamada (la variable de puntero almacena la dirección (es decir, el puntero)), Pero puede cambiar el valor de la variable apuntada por la variable de puntero de parámetro real

 

Supongo que te gusta

Origin blog.csdn.net/qq_31702609/article/details/81292833
Recomendado
Clasificación