如何将两个变量的地址存储在后续C程序的指针中

时间:2018-02-06 18:06:16

标签: c pointers arguments

程序:交换两个变量

main(){    
  int a,b    
  ...    
  swap(&a,&b)
  ...
}

void swap(int *x,int *y){
  ...   
}

根据我的理解,对于swap(&a,&b)void swap (int *x,int *y)a的地址将存储在*x中,b的地址将是如果我们匹配*y中交换函数的参数及其定义,则存储在main中。

但此处a的地址将存储在x中,b的地址将存储在y实际发生的内容

为什么ab的地址存储在xy而不是*x*y

2 个答案:

答案 0 :(得分:1)

交换对地址没有任何作用。您没有包含交换代码,但可能看起来像这样:

void swap(int* x, int* y){
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

所以会发生什么,你将指向a和b的指针传递给swap,进入后,x指向a,y指向b。然后,您获得带有*x的a的值并将其存储到tmp,将b的值放入带有*x=*y;的变量a中,最后存储a的原始值(在tmp)中,并将其存储到b中。

swap不会交换地址,而是交换值。你传递地址的原因是因为swap需要能够修改变量,当你传递一个简单的变量(如int)时,函数会获得变量的副本,并且原件未经修改。为了修改变量,你向函数传递一个指向变量的指针,指针被复制(所以如果改变指针指向函数的位置,原始指针不会改变),但你可以修改指针指向的值。

答案 1 :(得分:-1)

  

为什么'a'和'b'的地址存储在'x'和'y'而不是* x和* y?

因为'x'和'y'是整数指针。它们的值是整数的地址。