c语言之形参和实参,全局变量和局部变量

c语言中形参与实参:

形参 form parameter
实参 real parameter
出现在函数定义中的参数,就叫形参
出现在函数调用中的参数,就叫实参
函数定义:


int max( int a , int b ) //这里的a,b就是形参
{
//在函数中,形参就可以当作是一个局部变量。
if ( a>b ) return a;
else return b;
}
函数调用
int main()
{
int a=3,b=5 ;

printf( "max=%d\n" , max(a,b) ); //这里的a,b就是实参 。
return 0;
}

C中的函数参数传递是传递变量的数值,因此,这里相当于调用 max(3,5) 而子函数中收到的就会是 3 5这两值,而与ab变量没有关系。

  • 形参定义时编译系统并不为其分配存储空间,也无初始值,只有在函数调用时,临时分配存储空间,接受来自实参的值。函数调用结束,内存空间释放,值消失
  • 实参可以是常量,变量和表达式,但必须在函数调用前有明确的值。
  • 实参与形参必须类型相同且个数相同。

变量的作用域:

局部变量:
在一个函数内部定义的变量或复合语句内定义的变量称为局部变量。任意一个函数都不能访问其他函数中定义的局部变量,因此在不同函数之间可以定义同名 的局部变量,不会发生冲突。

-主函数中定义的变量,也属于局部变量,其作用范围同样仅限于主函数内。

-形参也是局部变量

-编译时,编译系统不为局部变量分配内存单元,而是在程序运行中,当局部变量所在函数被调用时,编译系统才根据需要临时分配内存。调用结束,内存空间释放

全局变量:
在所有函数(包括main函数)外定义的变量即为全局变量,全局变量存储在静态存储区中,其作用域是从定义的地方开始到本源文件结束。若定义时不进行初始化,系统将自动赋予其初值,数值型赋予0,字符型赋予’\0’.

-当一个函数返回多个值时,使用全局变量更为有效

#define PI 3.14  //宏定义 
float c,area;  //全局变量
void f(float r)
{c=2*PI*r;
area=PI*pow(r,2);
}
main()
{float r;  //局部变量
printf("input r:");
scanf("%f",&r);
f(r);
printf("%f,%f",c,area);
}

-如果在同一个源文件中,全局变量和局部变量同名,则在局部变量的作用范围内,全局变量不起作用

int a=3,b=5;
int max(int x,int y)
{
int c;
c=x>y?x:y;  //a>b ? a : b –>若?前结果为真则运算结果为a,反之运算结果为ba>b ? a : b –>若?前结果为真则运算结果为a,反之运算结果为b
return c;
}
main()
{
int a=8;  //局部变量和全局变量a同名,因位在main函数中,所以使用的是main函数中变量a的值。
printf("%d",max(a,b));
}

-全局变量在函数编译阶段分配内存,在程序的执行阶段不释放,因此全局变量只进行一次初始化,可不赋值

  • 17
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值