鱼C论坛

 找回密码
 立即注册
查看: 421|回复: 0

[学习笔记] 每日一学13

[复制链接]
发表于 2024-12-9 18:44:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 6bingame 于 2024-12-9 18:44 编辑

函数中的变量

局部变量

局部变量就是在函数内部或者块内定义的变量。局部变量只在它的函数内部或块内部有效,在这个范围之外是不能使用这些变量的。

例如:
  1. int func(int a,int b)      //函数func
  2. {
  3. double x,y;
  4. ......
  5. }
  6. mian()
  7. {
  8. int m,n;
  9. ......
  10. }
复制代码


在函数 func() 内定义了4个变量,a、b为形参,x、y为一般的变量。在 func() 的范围中,a、b、x、y都有效,或者说a、b、x、y等4个函数 func() 内是可见的。同理,m、n的作用域仅限于 main() 函数内。

关于局部变量的作用域,还要说明以下几点。
(1)主函数 main() 中定义的变量m、n只在主函数中有效,并不是因为在主函数中定义,而在整个文件或程序中有效。因为主函数也是一个函数,它与其它函数是平行关系。
(2)不同的函数中可以使用相同的变量名,它们代表不同的变量,这些变量之间互不干扰。
(3)在一个函数内部,还可以在复合语句(块)中定义变量,这些变量只在本复合语句中有效。
(4)如果局部变量的有效范围有重叠,则有效范围小的优先。

例如:
  1. void main()
  2. {
  3. int a,b,c;
  4. ......
  5. {
  6. int c;

  7. c=a+b;

  8. ......
  9. }
  10. }
复制代码


整个main()函数内a、b、c均有效,但程序进入函数内的复合语句中又定义了一个变量c,此时的变量与复合语句外部的变量c重名,那么在此范围内c变量优先使用。

例题1:局部变量的应用

解:
  1. #include<stdio.h>

  2. int main()
  3. {
  4.     int i=2,j=3,k;      //变量i,j,k在 mian 函数内部均有效

  5.     k=i+j;
  6.     {
  7.         int h=8;        //变量h只在包含它的复合语句中有效

  8.         printf("%d\n",h);
  9.     }
  10.     printf("%d\n",k);

  11.     return 0;
  12. }
复制代码


例题分析:
本范例中,变量只在复合语句的语句块内有效,离开该复合语句,该变量则无效。




全局变量

与局部变量相反,在函数之外定义的变量称为全局变量。由于一个源文件可以包含一个或若干个函数,全局变量可以为本文件中的其他函数所共用,他的有效范围从定义点开始,到源文件结束,全局变量又称为外部变量
例如:

  1. int a=2,b=5;                //全局变量

  2. int f1()                        //定义函数f1

  3. {
  4. ......
  5. }
  6. double c,d;                        //全局变量

  7. void f2()                        //定义函数f2
  8. {
  9. ......
  10. }
  11. main()                                //主函数
  12. {
  13. ......
  14. }
  15. int e,f;                        //全局变量
复制代码


其中,a、b、c、d、e、f 都是全局变量,但它们的作用范围不同。在 main() 函数、函数 f1() 和函数 f2() 中,可以使用 a、b、c、d ;在函数 f2() 和 main() 函数中可以使用 c、d,但不能使用a、b。变量 e、d 不能被任何函数使用。

例题2:编写一个函数,实现同时返回10个数的最大值和最小值。

解:
  1. #include<stdio.h>

  2. #include<math.h>

  3. #include<stdlib.h>

  4. int min;        //全局变量min

  5. int find()
  6. {
  7.     int max,x,i;

  8.     x=rand()%101+100;       //产生一个[100,200]之间的随机数x

  9.     printf(" %d",x);

  10.     max=x;

  11.     min=x;      //设置最大数和最小数

  12.     for(i=1;i<10;i++)
  13.     {
  14.         x=rand()%101+100;       //再产生一个[100,200]之间的随机数x

  15.         printf(" %d",x);

  16.         if(x>max)

  17.             max=x;      //若新产生的随机数大于最大数,则进行替换

  18.         if(x<min)

  19.             min=x;      //若新产生的随机数小于最小数,则进行替换

  20.     }
  21.     return max;
  22. }

  23. int main()
  24. {
  25.     int m=find();

  26.     printf("\n最大数:%d,最小数:%d\n",m,min);

  27.     return 0;
  28. }
复制代码


例题分析:
本范例中,变量min是全局变量,它的作用范围是整个源文件。程序通过返回最大值,最小值则由全局变量进行传递。由此可见,如果需要传递多个数据,除了使用函数外,还可以借助于全局变量,因为函数的调用只能带回一个返回值,因此有时可以利用全局变量增加与函数联系的渠道,从函数得到一个以上的返回值。因此,全局变量的使用增加了函数之间传送数据的途径。在全局变量的作用域内,任何一个函数都可以引用该全局变量。但如果在一个函数中改变了全局变量的值,就会影响其他函数,相当于各个函数间有直接的传送通道。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-7 05:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表