簡體   English   中英

C中的void指針交換函數

[英]void pointer swap function in C

我寫了一個 func swap_pointers 旨在替換兩個指針指向的內存地址。

意思是如果在調用 swap 之前, v_a指向int av_b指向b ,之后v_a應該指向bv_b a

運行main() ,我確實看到了地址開關,並且 callng printf()確實打印了6 8 ,但是當行

a = *((int *) v_a);
b = *((int *) v_b);

執行后,變量( ab )都收到值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相同。

要交換變量ab的值,您需要使用一個中間變量或編寫另一個函數來交換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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM