鱼C论坛

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

[学习笔记] 每日一学13

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

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

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

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

函数中的变量

局部变量

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

例如:
int func(int a,int b)      //函数func
{
double x,y;
......
}
mian()
{
int m,n;
......
}

在函数 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)如果局部变量的有效范围有重叠,则有效范围小的优先。

例如:
void main()
{
int a,b,c;
......
{
int c;

c=a+b;

......
}
}

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

例题1:局部变量的应用

解:
#include<stdio.h>

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

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

        printf("%d\n",h);
    }
    printf("%d\n",k);

    return 0;
}

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




全局变量

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

int f1()                        //定义函数f1

{
......
}
double c,d;                        //全局变量

void f2()                        //定义函数f2
{
......
}
main()                                //主函数
{
......
}
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个数的最大值和最小值。

解:
#include<stdio.h>

#include<math.h>

#include<stdlib.h>

int min;        //全局变量min

int find()
{
    int max,x,i;

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

    printf(" %d",x);

    max=x;

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

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

        printf(" %d",x);

        if(x>max)

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

        if(x<min)

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

    }
    return max;
}

int main()
{
    int m=find();

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

    return 0;
}

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 15:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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