静态局部变量与普通变量的区别
(1)静态局部变量
在局部变量前加上存储类型说明static就构成了静态局部变量。
静态局部类型变量定义的一般形式为:
static 数据类型 变量名;
例如:
static int a,b;
静态局部变量的生存期则为整个程序有效。
③系统自动为静态局部变量赋初值0,而自动变量(局部变量)的初值则不确定。
(2)静态全局变量
在全局变量前加上存储类型说明static,就构成了静态全局变量,如:
static int a=3;
void main()
{
…
}
全局变量的作用域是整个源程序,而静态全局变量的作用域则是定义该变量的源文件,如果一个程序由多个“.c”文件组成,全局变量则在各个源文件中都是有效的,而静态全局变量则仅在定义它的源文件中有效。
外部变量的特点如下:
①外部变量与静态变量一样,系统自动为未初始化的变量赋0值。
②外部变量与全局变量一样,作用域从定义直到源程序结束,生存期为整个程序执行过程。
③外部变量可以被不同的文件共享,若只希望在本文件中使用,可以加static加以说明。
#include<stdio.h>
#include<stdlib.h>
static int n;//定义的静态全局变量
int fun1()
{
static int m=0;//静态局部变量
m++;
return m;
}
int fun2()
{
n=0;
n++;
return n;
}
int fun3(){
int k=0;
k++;
return k;
}
int main()
{
int i;
for(i=0;i<10;i++)
{
fun1();//m为静态局部变量 这个函数运行结束,这个静态变量的值不会被销毁,函数下次使用时仍能使用。
}
printf("m = %d\n",fun1());
printf("n = %d\n",fun2());
printf("k=%d\n",fun3());
system("pause");
return 0;
}
```c
#include <stdio.h>
int b; /*定义全局变量b*/
extern int c; /*声明c为一个在wa2.c中定义的外部变量*/
int main()
{ void fun1();
{ int a=3,b=4; /*定义局部变量a,b*/
printf("main1:a=%d,b=%d,c=%d\n",a,b,c);
c=5; /*给外部变量c赋值*/
printf("main2:a=%d,b=%d,c=%d\n",a,b,c);
fun1();
}}
int c;
void fun1()
{
int a=10,b=20;
c=30; /*修改外局变量c*/
printf("fun1:a=%d,b=%d,c=%d\n",a,b,c);
return;
}
#include <stdio.h>
int b; /*定义全局变量b*/
extern int c; /*声明c为一个在wa2.c中定义的外部变量*/
int main()
{ void fun1();
{ int a=3,b=4; /*定义局部变量a,b*/
printf("main1:a=%d,b=%d,c=%d\n",a,b,c);
c=5; /*给外部变量c赋值*/
printf("main2:a=%d,b=%d,c=%d\n",a,b,c);
fun1();
}}
int c;
void fun1()
{
int a=10,b=20;
c=30; /*修改外局变量c*/
printf("fun1:a=%d,b=%d,c=%d\n",a,b,c);
return;
}
需要操作与局部变量同名的全局变量时,就可以用作用域操作符“::”来访问全局变量,格式是在全局变量名前加上作用域操作符。
#include<stdio.h>
#include<iostream>
using namespace std;
double A; //全局变量A
int main()
{ int A; //全局变量A
A=5; //为全局变量A赋值
::A=2.5; //为全局变量A赋值
cout<<A<<endl; //输出全局变量的值5
cout<<::A<<endl; //输出全局变量的值2.5
}
C语言中,变量的存储类型有以下4种。
(1)自动类型(auto)。
(2)寄存器类型(register)。
(3)静态类型(static)。
(4)外部类型(extern)。
变量的存储类型有静态存储和动态存储两种方式,其中自动类型和寄存器类型的变量属于动态存储方式,而外部类型和静态类型的变量属于静态存储方式。
自动类型变量是默认的存储类型
自动变量属于局部变量范畴,具有局部变量的一切特点。
①自动变量的作用域和生存期仅限于定义它的函数或复合语句内,即块(函数块或复合语句)内生存、块内有效。
②不同的函数(复合语句)中的自动变量可以同名。
③形参变量属于自动变量。