C语言函数中形参与实参之间容易混淆的部分

首先我们以一个很简单的例子 写一个函数可以交换两个整形变量的内容
以下是最直观的以函数的方式交换两个值的代码
#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
void swap(int x, int y)
{
int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf(“a=%d b=%d\n”, a, b);
swap(&a, &b);
printf(“a=%d b=%d\n”, a, b);
system(“pause”);
return 0;
}
在这里插入图片描述
没错 就是一气呵成写出了错误的代码
经过调试监视之后发现
在这里插入图片描述
在函数内x与y的确借助tmp交换了值但是却并没有改变a与b的值
他们的地址他们所处的内存空间都是不同的所以并没有发生变化
其中没有交换的根本原因则是:
当我们把实参传递给形参的时候
形参将是实参的一份临时拷贝
对形参的修改不会改变实参

于是有了新的想法,我们可以利用指针来合理的解决这个问题 直接通过a与b取地址来改变a与b的值
#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
void swap(int* px, int*py)
{
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf(“a=%d b=%d\n”, a, b);
swap(&a, &b);
printf(“a=%d b=%d\n”, a, b);
system(“pause”);
return 0;
}
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值