C语言的形式参数和实际参数
变量:
声明变量时,系统将为您分配一块内存,并且该内存还将有一个地址;
是全局变量还是局部变量,范围和生命周期可能不同,只有类型不同,基本属性相同,才是变量;
没有所谓的指针变量c语言中 实参与对应参,但是此变量的类型是指针. 他还分配了一块内存,有自己的地址,长度为int,但他的数据是某个块的地址;
因此,如果要通过参数修改数据,则只能传入变量的地址,然后函数主体获取相应的地址. 如果仅将变量传递给地质中的数据,则相当于函数体变量的一部分,作用域在函数体中,当函数体结束时,生命周期结束;
//以下是网络收集的有助于理解的数据;
记住这一基本原理: 形式参数等同于函数中定义的变量,调用函数传递参数的过程等同于定义形式参数变量并用实际参数的值对其进行初始化. 例如,这样称呼它:
void print_time(整数小时,整数分钟){printf(“%d: %d \ n”,小时,分钟);} int main(整数){int h = 23,m = 59; print_time(h,m);返回0;}
这等效于在函数print_time中执行一些语句:
int hour = h; int分钟= m; printf(“%d: %d \ n”,小时,分钟);
main函数的变量h和print_time函数的参数hour是两个不同的变量,不同之处在于它们的存储空间保持相同的值23,因为变量h的值已分配给参数hour. 类似地,将变量m的值分配给参数min. 这种用C语言传递参数的方式称为“按值调用”. 调用函数时,每个参数都需要获取一个值. 函数定义中有几个形式参数. 在调用期间必须传递几个实际参数. 不多或不少. 每个参数的类型也必须对应.
在未发生函数调用的情况下,定义函数中指定的形式参数不会占用内存中的存储单元. 仅当发生函数调用时,函数max中的形式参数才被分配存储单元. 调用结束后,也会释放形式参数占用的存储单元.
实际参数可以是常量,变量和表达式,但是它们必须具有某些值. 调用时,将实际参数的值分配给形式参数.
在C语言中,从实际参数到形式参数的数据传递是值传递,单向传递,只有实际参数被传递给形式参数,而不是形式参数到实际参数. 在存储器中,实际参数单位和形式参数单位是不同的单位. 调用该函数时,会将存储单元分配给形式参数,并将与实际参数对应的值传递给形式参数. 调用完成后,释放正式参数单元,而实际参数单元仍保留原始值.
作为函数参数的指针变量也必须遵循此规则. 不能通过调用函数来更改参数变量的值,但是可以更改参数指针变量所指向的变量的值.
函数的形式参数和实际参数具有以下特征:
1. 形式参数变量仅在被调用时分配存储单元c语言中 实参与对应参,并在调用结束时立即释放分配的存储单元. 因此,形式参数仅在函数内部有效. 函数调用结束并返回到调用函数后,将无法再使用参数变量.
2. 实际参数可以是常量,变量,表达式,函数等. 无论实际参数是什么数量的量,在调用函数时它们都必须具有某些值,以便将这些值转换为形式参. 因此,有必要预先使用赋值,输入等方法使实际参数获得一定的值.
3. 实际和形式参数在数量,类型和顺序上应严格一致,否则会发生“类型不匹配”错误.
4. 函数调用中发生的数据传输是单向的. 即,实际参数的值只能传递给形式参数,形式参数的值不能反向传递给实际参数. 因此,在函数调用期间,形式参数的值会更改,但实际参数中的值不会更改.
#include
#include
void swap_a(整数a,整数b)
{
a ^ = b;
b ^ = a;
a ^ = b;
}
无效交换(int * a,int * b)
{
* a = 20;
* b = 10;
}
int main()
{
int a = 10;
int b = 20;
int x = 10;
int y = 20;
swap_a(x,y);
交换(&a,&b); //
printf(“ a: %d,b: %d,x: %d,y: %d”,a,b,x,y);
getchar();
返回0;
}
结果: a: 20,b: 10,x: 10,y: 20
分析: swap(x,y)形式参数可以理解为函数的局部变量. 调用结束后,释放内存,可以将实际参数传递给形式参数,而不能将形式参数传递给实际参数;
交换(&a,&b);实际参数是地址,* a = 20; * b = 10;此功能处理地址,即使子功能释放了所有内存,地址上的值也已更改,因此可以将其传递出去,
以上情况是我自己的总结
Pos_HelloWorld
已发表1条原始文章·喜欢4条·访问1367
关注私信
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-164309-1.html