C语⾔形参跟实参详解
形参与实参
今天我们来说下c语⾔形参与实参的区别,形参跟实参理解的话也很简单,但是好多同学关于这个知识点都是⼀知半解,没有真正的去透彻,⼀问都知道,但在真正引⽤的时候还会出现很多问题,⽽百度的时候⼜会说看不懂,所以我们今天来做⼀个⽐较全⾯的介绍
我们今天讲解以简单明了易看懂为基础
1.形参和实参是什么
简单来说,形式参数(形参)就是形式上的参数,没有确定值,
明解c语言
⽽实际参数(实参)是实际存在的,已经确定的参数,常量,变量,表达式,都是实参,
最简单的例⼦
int a=2;这⾥的A有了实际的值为实参
int change(int b,int c);**c和b就是形参**。这⾥的c和b可以是任意⼀个值传递,为形参
int main()
{
change(1,2);这样就是把实参值传递给形参,1和2就是实参
}
这样我们能有⼀个简单的认识
2.形参和实参的区别
形参实参
形参变量只有在被调⽤时才分配内存单元,在调⽤结束时,即刻释放所分配的内存单元。因此,形参只有在函数
内部有效。函数调⽤结束返回主调函数后则不能再使⽤该形参变量
实参定义后就会分配内存
形参出现在函数定义中,在整个函数体内都可以使⽤, 离开该函数则不能使⽤实参出现在主调函数中,进⼊被调函数后,实参变量也不能使⽤
形参没有确定的值实参在值传递给形参的时候,必须要有
确定的数值
3.形参与实参知识点
3.1实参的值不随形参的变化⽽变化
在C语⾔中,数据传送是单向的,即只能把实参的值值传递给形参,但形参的变化不会改变实参的值,我们可以简单理解,就相当于把实参的值 复制给了另⼀个数(形参),⽽另⼀个数的改变不会改变原来数(实参)的值,正规来说:他们在内存中位于不同的位置,形参将实参的内容复制⼀份,在该函数运⾏结束的时候形参被释放,⽽实参内容不会改变。。
** 3.2.实参传递给形参的参数个数类型和顺序都应相同,否则会系统强制转换,出现数据丢失或者“类型不匹配”的错误
⽐如
float a=5.34;
void number(int b);
int main()
{
number(a);//这样就会出现丢精度现象
}
3.3如果实参是数组名,那么形参传递的之就是地址的值
int a[5];
void add(int*b);
int main()
{
add(a);//这样就是把数组a的⾸地址做为形参传递
}
在C⾥⾯ 是⽆法做到形参改变 实参值同步改变的。如果要⽤函数改变实参的值,可以⽤指针作为参数来改变
通过直接改变地址存储值来改变实参