程序:交换两个变量
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
中实际发生的内容 。
为什么a
和b
的地址存储在x
和y
而不是*x
和*y
?
答案 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'是整数指针。它们的值是整数的地址。