#include<stdio.h>
int Max(int x,int y)
{
if (x > y)
return x;
else if (x < y)
return y;
}
int main()
{
int a = 10;
int b = 20;
printf("较大值是%d",Max(a, b));
return 0;
}
输出结果:
较大值是20
- 相信以上代码大家都很熟悉,目的是输出较大值。但你知道其中的原理吗?
- 以上属于传值调用,咱把实参
a
和b
的值传给了形参x
和y
,由于是传值,那么就需要额外开辟空间去存这些值。所以传值调用时,形参相当于实参的一份拷贝
二、传址调用
2.1 对比传值调用(一)
咱们先看看下面这段代码:
#include<stdio.h>
void Modify(int x)
{
x = 20;
}
int main()
{
int a = 10;
Modify(a);
printf("%d",a);
return 0;
}
输出结果:
- 我们的本意是给
a
重新赋值为20
的,结果输出还是10
!因为这还是属于传值调用,我们分析看看
- 发现只是改了
x
的值!因为传值调用下,x
是a
的拷贝,也有属于自己存值的空间,所以改变x
不能影响a
2.2 对比传值调用(二)
- 可以发现,某些情况下传值调用是不行的,所以需要有传址调用
修改一下
2.1
的代码:
#include<stdio.h>
void Modify(int\* x)
{
\*x = 20;
}
int main()
{
int a = 10;
Modify(&a);
printf("%d",a);
return 0;
}
输出结果:
- 发现成功修改了
a
的值!可是为什么呢?我们来分析分析
- 可以发现,当我们把
a
的地址传递给指针x
时,指针x
就指向了a
所在内存空间,这时修改的值就是a
的值
三、传值调用&传址调用的误区
观察以下代码:
#include<stdio.h>
void Modify(int\* x)
{
\*x = 20;
}
int main()
{
int a = 10;
int\* p = &a;
Modify(p);
printf("%d",a);
return 0;
![img](https://img-blog.csdnimg.cn/img_convert/f7fe040610293ba73d7690f63ecebd6b.png)
![img](https://img-blog.csdnimg.cn/img_convert/4e71d967cb9a365b1101cafcc4eef5f1.png)
![img](https://img-blog.csdnimg.cn/img_convert/bb419a3ead0871bdcd419fa82253a525.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
]
[外链图片转存中...(img-aEaAxfZP-1725771001881)]
[外链图片转存中...(img-wW7TNzMw-1725771001881)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**