变量在传参后对主函数中原变量的影响

 #include<stdio.h>

void swap(int a, int b)//用变量接收,这就是我实际过程中写的,天哪,简直被自己蠢死!

{
a = a + b;
b = a - b;
a = a - b;

}

void swap(int *a, int*b)//用指针接收参数

{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;

}

int main()

{  
int a = 4, b = 3;
swap(&a,&b);
printf("a=%d,b=%d", a, b);
    return 0;

}



通过写的这两个交换函数,我想说明什么呢?

那就是形参接受普通变量的值和其接受地址的值给我们所写的主函数所带来的结果是不一样的,如果其接受的值为普通地址的值,那么其形参的值是不传回给主函数中的变量的,如果是地址,则会传回,这就是这两个图出现这种结果的原因。

其实最根本的原因是编译系统执行函数的一个过程,如果传的是值,在被调函数执行完后,这块内存会被释放掉,但如果传的为地址,则只会将保存地址的这块内存释放掉,但释放掉之前,我们的编译系统已经根据传过来的这个地址,成功的将我们地址值对应的变量改啦,这就是对以上为什么会出现这两种结果的解释。其实调用的函数和被调用的函数它们的内存都会被释放,但是被调用的函数和释放的早。

猜你喜欢

转载自blog.csdn.net/weixin_40797414/article/details/80056115