es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Esta función con punteros aparentemente no se ejecutará en absoluto.

Estoy tratando de hacer un programa que intercambie 2 variables en una función con operadores bitwise, pero la función no hace nada. Estoy bastante seguro de que tengo la lógica básica del intercambio con XOR correctamente (verifiqué haciendo algunas operaciones manualmente y verifiqué en main), pero por alguna razón el bloque de la función simplemente no hace nada. También soy muy nuevo en programación en C, así que perdóneme por no detectar algún error obvio y tonto.

El código es:


#include <stdio.h> void swap(int *a, int *b) { printf("valor de a=%d b=%d antes del intercambio\n", *a, *b); *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; printf("valor de a=%d b=%d después del intercambio\n", *a, *b); } int main() { int a, b, *p, *q; printf("Ingrese 2 números para intercambiar: \n"); scanf("%d %d", &a, &b); p = &a; q = &b; swap(p, q); printf("\nfinal %d %d", a, b); }

Espero que esto te ayude.</stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay un par de problemas con el código proporcionado:

    1. La llamada a la función void swap(p, q); en el main es incorrecta. Las llamadas a funciones no necesitan el tipo de retorno, solo el nombre de la función y los parámetros. Por lo tanto, debería ser solo swap(p, q);.
    2. La función swap debe tener el tipo de retorno void en lugar de int.

    Después de hacer esos cambios, el programa debería funcionar como se espera:

    #include <stdio.h>
    
    void swap(int *a, int *b)
    {
        printf("valor de a=%d b=%d antes del intercambio\n", *a, *b);
        *a = *a ^ *b;
        *b = *a ^ *b;
        *a = *a ^ *b;
        printf("valor de a=%d b=%d después del intercambio\n", *a, *b);
    }
    
    int main()
    {
        int a, b, *p, *q;
        printf("Ingrese 2 números para intercambiar: \n");
        scanf("%d %d", &a, &b);
        p = &a;
        q = &b;
        swap(p, q);
        printf("\nfinal %d %d", a, b);
        return 0;
    }
    

    Este programa intercambia correctamente los valores de a y b utilizando operadores bitwise. El problema se debía principalmente a la sintaxis de la llamada a la función y al tipo de retorno de la función swap.</stdio.h>

Comments are closed.