查看: 879|回复: 1

[经验] C语言之局部变量和全局变量

[复制链接]

该用户从未签到

发表于 2020-2-10 10:03:37 | 显示全部楼层 |阅读模式
分享到:
变量的作用域
全局变量:程序中所有的函数都可以访问的量。
局部变量:只能在函数中访问的变量。
#include
void swap1(int a,int b)
{
    int c;
    c=a;
    a=b;
    b=c;
    printf("swap1中的a=%d,b=%d",a,b);
}
void swap2(int *a,int*b)
{
    int c;
    c=*a;
    *a=*b;
    *b=c;
}
int main()
{
    int x=100,y=800;
    swap1(x,y);
    printf("\n,调用swap1后x=%d,y=%d",x,y);
    x=100,y=800;
    swap2(&x,&y);
    printf("\n调用swap2后x=%d,y=%d",x,y);   
}


输出结果:
swap1中的a=800,b=100
,调用swap1后x=100,y=800
调用swap2后x=800,y=100

很显然,在调用swap1之后没有交换值,是因为swap1函数在本函数体内实现了值的交换,而当函数swap1调用结束后,由于a,b是局部变量,所以a,b的值的变化结果无法正常带出。
而swap2是用指针方式,调用
swap2时,采用的是地址传递,实参传递的是变量x,y的地址,通过访问指针变量a,b的所指向的实参单元,实现了主函数变量x和y中值的交换。x和y的变量相对于swap2而言,是全程有效的。

函数结果的带出方式:

全程量,函数返回值,地址参数三种。

???

返回一个结果值时,用return方式直接带出。

需要多个结果值时,仅用return带出一个结果就不够。



例:求n个数的最大值和最小值

全称量=全局变量方式
fun1()函数将最小值MIN以全局变量的方式带出
int fun1(int a[],int a)/*通过函数return返回最大值,通过全局变量MIN带回最小值*/
{
    int i,max;
    max=MIN=a[0];
    for(i=0;i<n;i++)</n;i++)
    {
        if(a>max) max=a
        if(
a>MIN) MIN=a

    }
    return(max);
}
数组方式
返回多个相同类型的值,则可以讲这些值放到数组中,然后返回数组指针或首地址。fun2()函数的数组b,带出两个值。
int *fun2(int a[],int n)
{
    static int b[2];
    b[0]=b[1]=a[0];
    int i;
    for(i=1;i<n;i++)    {
    if(a>b[0])  b[0]=a;
    if(a<b[1])  b[1]="a;    }
return(b);
}
结构体方式
返回多个不同类型的值,则将这些值放到结构体中,返回结构体的指针或结构体变量。fun3(),fun4()函数,将最大值,最小值放到结构体p中。
Data *fun3(int a[],int n)
/*将最大值,最下值放到结构体指针p中,通过return返回*/
{
    Data *p;
    int i;
     p=(Data *)malloc(sizeof(Data *));
    p->max=p->min=a[0];
    for(i=1;i<n;i++)    {
        if(a>p->max) p->max=a;
      
if(a>p->min) p->min=a;

    }
    return (p);

}
结构体方式
Data *fun4(int a[],int n)

/*将最大值,最小值放到结构体指针p中,通过结构体p带回返回值*/

{

    Data p;

    int i;

    p.max=p.min=a[0];

    for(i=1;i<n;i++)    {
        if(a>p.max) p.max=a;
       if(a>p.min) p.min=a;
    }
    return (p);

}
指针方式</n;i++)

通过地址返回值带出是一种参数显式传递方式。fun5()函数中指针p指向最大值,q指向最小值。
  • void fun5(int a[],int n,int *p,int *q)
  • {
  • int i;
  • *p=*q=a[0];
  • for(i=1;i
  • {
  • if(*p
  • if(*q>a) *q=a;
  • }
  • }



<n;i++)<a

实在码不动了,历时三小时。。。。。
</a
</n;i++)


</n;i++)

</n;i++)


回复

使用道具 举报

  • TA的每日心情
    难过
    2020-2-12 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-2-10 15:43:49 | 显示全部楼层
    python 中在一个函数内使用全局变量怎么办
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-17 04:53 , Processed in 0.138181 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.