【发布时间】:2021-01-15 11:06:58
【问题描述】:
我写了一个 func swap_pointers 来替换两个指针指向的内存地址。
意思是如果在调用swap之前,v_a指向int a和v_b指向b,之后v_a应该指向b,而v_b指向a。
运行main(),我确实看到了地址开关,并且调用printf() 确实打印了6 8,但是当行时
a = *((int *) v_a);
b = *((int *) v_b);
被执行,两个 vars(a 和 b)收到值 6。
我不明白为什么会这样。
void swap_pointers(void **a, void **b){
void * tmp=*a;
*a = *b;
*b = tmp;
}
int main() {
int a = 8;
int b = 6;
void *v_a = &a;
void *v_b = &b;
swap_pointers(&v_a, &v_b);
printf("%d %d\n", *((int *) v_a), *((int *) v_b));
a = *((int *) v_a);
b = *((int *) v_b);
}
【问题讨论】:
-
这能回答你的问题吗? Swapping objects using pointers
-
请注意,如果您这样做
int new_a = *((int *) v_a);int new_b = *((int *) v_b);,这不会发生。你认为为什么会这样? :) -
无关:你为什么不使用
std::swap(v_a, v_b);?
标签: c pointers memory swap void-pointers