2020-12-24

局部变量和全局变量

局部变量
1:类型:自动变量(auto),寄存器变量(register),静态局部变量(static),其作用范围仅限于函数内部

2:静态局部变量(static):函数调用结束后仍然保留其定义的局部变量的值

#include<stdio.h>
func(int a,int b)
{
int i=2;
static int m=0;
i+=m+1;
m=i+a+b;
return(m);

}
int main()
{
int k=4,m=1,p;
p=func(k,m);
printf("%d\n",p);
p=func(k,m);
printf("%d\n",p);
return 0;
}

2020-12-24

3:局部变量代码

#include<stdio.h>
int main()
{
int a=0;  //局部变量a
    {
        int a=5;//局部变量a
        printf("复合语句内 a=%d\n",a);
    }
    printf("复合语句外 a=%d\n",a);
    return 0;
}

2020-12-24

全局变量
1:类型:静态全局变量,外部变量(非静态全局变量,可以被其他文件引用)

2:外部变量(extern):扩展全局变量的作用域
(1):在一个文件内扩展全局变量的作用域

nclude<stdio.h>
int main()
{
extern int a;  //声明已定义的全局变量
a=3;
printf("a=%d\n",a);
return 0;

}
int a;   //定义a为整形全局变量

2020-12-24

(2)将全局变量的作用域扩展到其他文件
f1.c

#include<stdio.h>
int a,b,c;
int main()
{
void f();
a=3;
b=4;
f();
printf("c=%d\n",c);

}

f2.c

extern int a,b,c;
void f()  //把f1中已定义的全局变量的作用域扩展到本文件中
{
c=a+b;
}

(3)extern 只能用来声明变量,不能用来定义变量,因为它不产生新变量,只能声明该变量已在其他地方定义过,extern也不能用来定义初始化变量,例如“extern int x=1”是错误的。

3:全局变量的代码

#include<stdio.h>
int a,b,c;//全局变量a,b,c
void f()
{
c=a+b;
}
int main()
{
a=3;
b=4;
f();
printf("c=%d\n",c);
}

2020-12-24

4:当全局变量和局部变量重名时,则在局部变量的作用范围内,全局变量不起作用

#include<stdio.h>
int d;
fun(int p)
{
int d=3;
d+=p;
printf("d=%d,p=%d",d,p);

}
int main()
{
int a=2;
fun(a);
d+=a;
printf("d=%d,a=%d\n",d,a);
return 0;

}

2020-12-24

上述程序中d位全局变量,在main函数中,起作用的是全局变量d。而在fun函数中定义了局部变量d,所以在fun函数中全局变量无效。

上一篇:图片数据处理


下一篇:EXE和DLL调用关系,DLL制作,钩子