C语言中“实际参数”“形式参数”的概念是什么?
8个回答
展开全部
形式参数就是定义函数时候的参数表,只是定义了调用时参数的个数、类型和用来引用的名字,并没有具体的内容。形参未被调用时,不占存储单元。形参只在调用过程中占用存储单元。
在调用函数时,给形参分配存储单元,实参可以是常量、变量或者表达式,且要与形参类型一致!而且实参要有确定的值,在调用过程中实参将值赋给形参,并将实际参数对应的数值传递给形式参数;
调用结束后,形参单元被释放,实参单元仍然保留 并且维持原值。所以说,实参是调用函数传递的具体数据。实参对形参数据传递时时单向传递。在存储单元中是不同的单元。
下面这段程序中
#include<stdio.h>
int fun(int a,int b)
{a+=10; b=a+b*2;
return a+b;
}
void main()
{
int x=3,y=5,z;
z=fun(x,y);
printf("%d %d %d\n",x,y,z);
}
a和b都是形式参数,x和y都是实际参数。
程序从主函数开始运行,等到运行到z=fun(x,y)开始调用被调用函数,以被调用函数的形式进行运算,然后把计算的值返回后赋值给z,这样一个运算就算完成了。在调用过程中,形参a和b的值都发生了改变,但是在main函数中,x和y的值都未发生变化。所以说实参向形参的值的传递是单向的。
在调用函数时,给形参分配存储单元,实参可以是常量、变量或者表达式,且要与形参类型一致!而且实参要有确定的值,在调用过程中实参将值赋给形参,并将实际参数对应的数值传递给形式参数;
调用结束后,形参单元被释放,实参单元仍然保留 并且维持原值。所以说,实参是调用函数传递的具体数据。实参对形参数据传递时时单向传递。在存储单元中是不同的单元。
下面这段程序中
#include<stdio.h>
int fun(int a,int b)
{a+=10; b=a+b*2;
return a+b;
}
void main()
{
int x=3,y=5,z;
z=fun(x,y);
printf("%d %d %d\n",x,y,z);
}
a和b都是形式参数,x和y都是实际参数。
程序从主函数开始运行,等到运行到z=fun(x,y)开始调用被调用函数,以被调用函数的形式进行运算,然后把计算的值返回后赋值给z,这样一个运算就算完成了。在调用过程中,形参a和b的值都发生了改变,但是在main函数中,x和y的值都未发生变化。所以说实参向形参的值的传递是单向的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼下的 回答我
你说形参是不是就相当于类 实参就相当于实例,只是不需要声明?
你说形参是不是就相当于类 实参就相当于实例,只是不需要声明?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数调用时需注意的东西。函数定义中函数首部中的参数叫形参,调用函数时使用的参数叫实参。C函数调用采用“值传递”,比如有函数:
int max(int x,int y)
{if(x>y)
return x;
return y;
}
在调用该函数时,有max(a,b);则该调用只把a(实参)的值赋给x(形参),把b(实参)的值赋给y(形参)。函数中对x,y的任何动作不改变a,b的值。值得注意的是如果用指针作参数,虽然符合上面原则,但对形参指向的数据的更改会影响实参指向数据的值。如函数:
int swap(int *x.int *y)/*交换*/
{int temp=*x;
*x=*y;
*y=temp;
}
则调用后swap第一个实参指向数据变为原第二个实参指向的数据,原第二个实参指向的数据变为第一个实参指向数据(因为指针的值是其指向数据的地址,该形参和实参指向同一个内存地址,形参对该地址存储值的改变,当然会影响到实参指向的地址存储值),但两指针指向(指向为其值)不变(上面的原则)。
int max(int x,int y)
{if(x>y)
return x;
return y;
}
在调用该函数时,有max(a,b);则该调用只把a(实参)的值赋给x(形参),把b(实参)的值赋给y(形参)。函数中对x,y的任何动作不改变a,b的值。值得注意的是如果用指针作参数,虽然符合上面原则,但对形参指向的数据的更改会影响实参指向数据的值。如函数:
int swap(int *x.int *y)/*交换*/
{int temp=*x;
*x=*y;
*y=temp;
}
则调用后swap第一个实参指向数据变为原第二个实参指向的数据,原第二个实参指向的数据变为第一个实参指向数据(因为指针的值是其指向数据的地址,该形参和实参指向同一个内存地址,形参对该地址存储值的改变,当然会影响到实参指向的地址存储值),但两指针指向(指向为其值)不变(上面的原则)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询