原创 C语言之局部变量和全局变量

2020-2-5 17:43 2519 8 3 分类: MCU/ 嵌入式 文集: C语言
变量的作用域
全局变量:程序中所有的函数都可以访问的量。
局部变量:只能在函数中访问的变量。
#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
    {
        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
    {
    if(a>b[0])  b[0]=a;
    if(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
    {
        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
    {
        if(a>p.max) p.max=a;
       if(a>p.min) p.min=a;
    }
    return (p);
}
指针方式
通过地址返回值带出是一种参数显式传递方式。fun5()函数中指针p指向最大值,q指向最小值。
  1. void fun5(int a[],int n,int *p,int *q)
  2. {
  3. int i;
  4. *p=*q=a[0];
  5. for(i=1;i
  6. {
  7. if(*p
  8. if(*q>a) *q=a;
  9. }
  10. }

实在码不动了,历时三小时。。。。。

作者: lucky_szt, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3903350.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

curton 2020-2-6 13:48

学习了
相关推荐阅读
lucky_szt 2020-02-04 10:01
51单片机之LED篇
如何区分LED正负极?LED的分类有直插式和贴片式(1)观察法直插式如果直插式LED是全新的,则可以通过引脚长短来判断正负极,引脚长的是正极,短的是负极。(长正短负)贴片式俯视,带彩色线的是负极,另一...
我要评论
1
8
关闭 站长推荐上一条 /3 下一条