Intercambiar elementos de dos estructuras
He simplificado mi pregunta a este pequeño programa en C. Ten en cuenta que estoy aprendiendo C por mi cuenta. ¡Estoy teniendo verdaderos problemas con los punteros!
#include <stdio.h>
#include <stdlib.h>
typedef struct Elmt_ {
int *i;
struct Elmt_ *next;
} E;
void swap_1(E *x, E *y) {
int *temp = NULL;
temp = x->i;
x->i = y->i;
y->i = temp;
}
void swap_2(E *x, E *y) {
int *temp=NULL;
temp = malloc(sizeof(int));
*temp = *(x->i);
*(x->i) = *(y->i);
*(y->i) = *temp;
}
int main() {
E *p, *q, *r, *s;
int a, b;
a = 8;
b = 50;
p = malloc(sizeof(E));
q = malloc(sizeof(E));
p->i = &a;
p->next = NULL;
q->i = &b;
q->next = NULL;
printf("Inicialmente, *(p->i)=%d *(q->i)=%d\n", *(p->i), *(q->i));
swap_1(p,q);
printf("Después de swap_1, *(p->i)=%d *(q->i)=%d\n", *(p->i), *(q->i));
r = malloc(sizeof(E));
s = malloc(sizeof(E));
r->i = &a;
s->i = &b;
printf("Inicialmente, *(r->i)=%d *(s->i)=%d\n", *(r->i), *(s->i));
swap_2(r,s);
printf("Después de swap_2, *(r->i)=%d *(s->i)=%d\n", *(r->i), *(s->i));
return 0;
}
Pregunta: En el programa anterior, ¿es swap_1
o swap_2
la forma correcta de intercambiar el valor entero apuntado por i
?
Veo que ambas funciones parecen intercambiar correctamente los valores dados como argumento.
“`
$ ./a.out
Inicialmente, *(p->i)=8 *(q->i)=50
Después de swap_1, *(p->i)=50 *(q->i)=8
Inicialmente, *(r->i)=8 *(s->i)=50
Después de swap_2, *(r->i)=50 *(s->i)=8
“`</stdlib.h></stdio.h>
davy.ai
Tanto
swap_1
comoswap_2
intercambian correctamente los valores enteros apuntados pori
.swap_1
intercambia los punteros a los valores enteros directamente, mientras queswap_2
utiliza la asignación de memoria dinámica para crear espacio para un entero temporal que contenga el valor de uno de los enteros que se intercambian.Ambos enfoques son válidos, pero
swap_1
es más eficiente ya que no requiere asignación de memoria. Sin embargo,swap_2
podría utilizarse en casos donde el tamaño del valor intercambiado es significativamente mayor que un entero, donde sería necesaria la asignación dinámica de memoria.