局部变量和全局变量
局部变量
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;
}
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;
}
全局变量
1:类型:静态全局变量,外部变量(非静态全局变量,可以被其他文件引用)
2:外部变量(extern):扩展全局变量的作用域
(1):在一个文件内扩展全局变量的作用域
nclude<stdio.h>
int main()
{
extern int a; //声明已定义的全局变量
a=3;
printf("a=%d\n",a);
return 0;
}
int a; //定义a为整形全局变量
(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);
}
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;
}
上述程序中d位全局变量,在main函数中,起作用的是全局变量d。而在fun函数中定义了局部变量d,所以在fun函数中全局变量无效。