c语言的参数和变量

您所在的位置:网站首页 c语言中形参可以是静态变量吗 c语言的参数和变量

c语言的参数和变量

2024-07-12 15:45:53| 来源: 网络整理| 查看: 265

函数的参数—实参|形参

在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。

函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。

形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。

形参和实参有以下几个特点:

形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

1 #include 2 3 //计算从1加到n的值 4 int sum(int n){ 5 int i; 6 for(i=n-1; i>=1; i--){ 7 n+=i; 8 } 9 printf("The inner n = %d\n",n); 10 return n; 11 } 12 13 int main(){ 14 int m, total; 15 printf("Input a number: "); 16 scanf("%d", &m); 17 total = sum(m); 18 printf("The outer m = %d \n", m); 19 printf("1+2+3+...+%d+%d = %d\n", m-1, m, total); 20 return 0; 21 }

运行结果:Input a number: 100↙The inner n = 5050The outer m = 1001+2+3+...+99+100 = 5050

通过 scanf 输入 m 的值,作为实参,在调用 sum() 时传送给形参 n。

从运行情况看,输入 m 值为100,即实参 m 的值为100,把这个值传给函数 sum 时,形参 n 的初始值也为100,在函数执行过程中,形参 n 的值变为 5050。函数运行结束后,输出实参 m 的值仍为100,可见实参的值不随形参的变化而变化。

 

摘自http://c.biancheng.net/cpp/html/57.html

 

局部变量

定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。

在 main 函数中定义的变量也是局部变量,只能在 main 函数中使用;同时,main 函数中也不能使用其它函数中定义的变量。main 函数也是一个函数,与其它函数地位平等。 形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。 可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。 在语句块中也可定义变量,它的作用域只限于当前语句块。

 

1 int f1(int a){ 2 int b,c; //a,b,c仅在函数f1()内有效 3 return a+b+c; 4 } 5 int main(){ 6 int m,n; //m,n仅在函数main()内有效 7 return 0; 8 } 全局变量

在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。

1 int a, b; //全局变量 2 void func1(){ 3 //TODO: 4 } 5 6 float x,y; //全局变量 7 int func2(){ 8 //TODO: 9 } 10 11 int main(){ 12 //TODO: 13 return 0; 14 }

a、b、x、y 都是在函数外部定义的全局变量。C语言代码是从前往后依次执行的,由于 x、y 定义在函数 func1() 之后,所以在 func1() 内无效;而 a、b 定义在源程序的开头,所以在 func1()、func2() 和 main() 内都有效。

局部变量和全局变量的综合示例 1 #include 2 3 int n = 10; //全局变量 4 5 void func1(){ 6 int n = 20; //局部变量 7 printf("func1 n: %d\n", n); 8 } 9 10 void func2(int n){ 11 printf("func2 n: %d\n", n); 12 } 13 14 void func3(){ 15 printf("func3 n: %d\n", n); 16 } 17 18 int main(){ 19 int n = 30; //局部变量 20 func1(); 21 func2(n); 22 func3(); 23 //代码块由{}包围 24 { 25 int n = 40; //局部变量 26 printf("block n: %d\n", n); 27 } 28 printf("main n: %d\n", n); 29 30 return 0; 31 }

运行结果:func1 n: 20func2 n: 30func3 n: 10block n: 40main n: 30

代码中虽然定义了多个同名变量 n,但它们的作用域不同,在内存中的位置(地址)也不同,所以是相互独立的变量,互不影响,不会产生重复定义(Redefinition)错误。

1) 对于 func1(),输出结果为 20,显然使用的是函数内部的 n,而不是外部的 n;func2() 也是相同的情况。

当全局变量和局部变量同名时,在局部范围内全局变量被“屏蔽”,不再起作用。或者说,变量的使用遵循就近原则,如果在当前作用域中存在同名变量,就不会向更大的作用域中去寻找变量。

2) func3() 输出 10,使用的是全局变量,因为在 func3() 函数中不存在局部变量 n,所以编译器只能到函数外部,也就是全局作用域中去寻找变量 n。

3) 由{ }包围的代码块也拥有独立的作用域,printf() 使用它自己内部的变量 n,输出 40。

4) C语言规定,只能从小的作用域向大的作用域中去寻找变量,而不能反过来,使用更小的作用域中的变量。对于 main() 函数,即使代码块中的 n 离输出语句更近,但它仍然会使用 main() 函数开头定义的 n,所以输出结果是 30。

 

 

标准C语言(ANSI C)共定义了15 个头文件,称为“C标准库”,所有的编译器都必须支持,如何正确并熟练的使用这些标准库,可以反映出一个程序员的水平。

合格程序员:、、、 熟练程序员:、、、 优秀程序员:、、、、、、

是先掌握一些最基本、最常用的函数,在实践过程中再逐步深入。根据需要查阅C语言函数手册,网址是 http://www.cplusplus.com。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭