我试图理解C中的指针并编写了这段代码
#include <stdio.h>
int swap(int *fa,int *fb){
int temp = *fa;
*fa = *fb;
*fb = temp;
}
int main(){
int a=5,b=7;
int *pa = &a;
int *pb = &b;
swap(pa,pb);
printf("%d\n",*pa);
printf("%d\n",*pb);
printf("%d\n",a);
printf("%d",b);
}
现在输出(按预期)是
7
5
7
5
我对正在发生的事情有点了解,但是我感到困惑
fa = pa // fa points to what pa points to which means a
fb = pb // fb points to what pb points to which means b
这是怎么回事
还是fa和fb首先影响pa和pb,进而影响a和b。
- 在我调用交换函数之后,就会发生这种情况
fa = pa // fa points to what pa points to which means a
fb = pb // fb points to what pb points to which means b
如果您的意思是输入后,swap
那么可以。那是对的。参数作为一个拷贝,这意味着函数内部传递fa
和fb
获取的副本pa
,并pb
从主叫方。
- 我们交换fa和fb的值,这又交换a和b的值,因为pa和pb指向a和b,它们也指向这些新值。
号fa
,并fb
没有在所有的感动。它们被取消引用。这意味着,他们指向的地址会受到影响。您可以printf
用来打印那些指针变量的内容。他们不会改变。而是更改a
和的内容b
。
顺便说一句:您的printf
发言没有多大意义。您应该在函数调用之前和之后都打印以查看效果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句