[英]void pointer swap function in C
我寫了一個 func swap_pointers 旨在替換兩個指針指向的內存地址。
意思是如果在調用 swap 之前, v_a
指向int a
, v_b
指向b
,之后v_a
應該指向b
, v_b
a
。
運行main()
,我確實看到了地址開關,並且 callng printf()
確實打印了6 8
,但是當行
a = *((int *) v_a);
b = *((int *) v_b);
執行后,變量( 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);
}
你做的交換之后, v_a
指向的地址b
,和v_b
指向的地址a
。
然后,當你這樣做時:
a = *((int *) v_a);
您實際上是將b
的值分配給a
,使其為 6。
然后,當然,當你分配給b
的下一行,您要分配的新值a
,這是6。
調用函數swap_pointers
swap_pointers(&v_a, &v_b);
指針 v_a 指向變量 b,指針 v_b 指向變量 a。
在此聲明之后
a = *((int *) v_a);
變量a
的值為6
。 指針v_b
指向變量a
,此時包含值6
.. 所以在這個語句之后
b = *((int *) v_b);
變量b
將獲取存儲在前面賦值語句中獲得的變量a
中的值,該值與值6
相同。
要交換變量a
和b
的值,您需要使用一個中間變量或編寫另一個函數來交換int
類型的對象中的值。
例如
void swap_integers( int *a, int *b )
{
int tmp = *a;
*a = *b;
*b = tmp;
}
該函數可以像這樣調用
swap_integers( v_a, v_b );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.