La función realiza el intercambio de dos números (acceso indirecto a variables fuera de la función mediante punteros)

Función para intercambiar dos números

En primer lugar, veamos si no podemos usar funciones, ¿cómo podemos intercambiar dos números?

#include <stdio.h>
int main()
{
    
    
	int a = 50;
	int b = 100;
	int temp = a;
	a = b;
	b = temp;
	printf("a=%d b=%d\n", a, b);
	system("pause");
	return 0;
}

Resultado: ayb realizaron con éxito el intercambio.
Inserte la descripción de la imagen aquí


Entonces, ¿cómo usar las funciones?
Mucha gente piensa que simplemente ponga la parte de los números de intercambio anteriores en la función, luego intentemos:

#include <stdio.h>
void swap(int x, int y){
    
    
	int temp = x;
	x = y;
	y = temp;
}
int main()
{
    
    
	int a = 50; 
	int b = 100;
	swap(a, b);
	printf("a=%d b=%d\n", a, b);
	system("pause");
	return 0;
}

resultado:

Análisis: Podemos ver que en este código, no hay intercambio entre ay b.
Entonces, ¿se intercambiaron xey?
Podemos agregar código para generar valores xey en la función para echar un vistazo.

Código:

void swap(int x, int y){
    
    
	int temp = x;
	x = y;
	y = temp;
	printf("x=%d y=%d\n", x, y);
}

Resultado:
Inserte la descripción de la imagen aquí
Análisis: En este código, encontramos que ayb no se intercambiaron. Lo que se intercambia dentro de la función es xey, xey son equivalentes a nuevas variables locales creadas, pero inicializadas por ay b. El intercambio de x e y no afecta a ay b.

La razón es: xey a los que se accede dentro de la función no son la ontología de ay b .


  Para resolver este problema, necesita encontrar una manera de hacer accesibles las variables fuera de la función dentro de la función. En lenguaje C, no podemos acceder directamente a variables locales fuera de la función, pero podemos usar punteros para acceder indirectamente a variables externas .

Código:

void swap(int* x, int* y){
    
    
	int temp = *x;
	*x = *y;
	*y = temp;
}

La función de intercambio aquí es equivalente al siguiente código:

    int* x = &a;
	int* y = &b;
	
	int temp = *x;
	*x = *y;
	*y = temp;

	int temp = a;
	a = b;
	b = temp;

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

En este código, primero defina dos variables de puntero x, y, donde x contiene la dirección de ay y contiene la dirección de b. Representa la desreferencia del puntero e indica el objetivo al que apunta el puntero. Entonces x es equivalente a a, * y es equivalente a, y luego intercambia a, b a través de la variable temporal temp.


La implementación final del código:

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

int main()
{
    
    
	int a = 50;
	int b = 100;
	swap(&a, &b);
	printf("a=%d b=%d\n", a, b);
	system("pause");
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_34270874/article/details/109286929
Recomendado
Clasificación