我已将我的问题简化为这个小 C 程序。请注意,我正在自学 C。我在指针方面遇到了真正的麻烦!
#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("Initially, *(p->i)=%d *(q->i)=%d\n", *(p->i), *(q->i));
swap_1(p,q);
printf("After 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("Initially, *(r->i)=%d *(s->i)=%d\n", *(r->i), *(s->i));
swap_2(r,s);
printf("After swap_2, *(r->i)=%d *(s->i)=%d\n", *(r->i), *(s->i));
return 0;
}
**问题:**在上面的程序中,交换所指向的整数值是swap_1
还是正确的方法?swap_2
i
我看到这两个函数似乎都正确地交换了作为参数给出的值。
$ ./a.out
Initially, *(p->i)=8 *(q->i)=50
After swap_1, *(p->i)=50 *(q->i)=8
Initially, *(r->i)=8 *(s->i)=50
After swap_2, *(r->i)=50 *(s->i)=8