C语言总结:变量

C语言总结:变量

2019-4-8

1. 按作用范围

局部变量与全局变量。
局部变量:在函数内部(包括形参)定义,只在所定义的函数内部或者局部复合语句中有效。
全局变量:在函数外部定义,作用范围为从定义位置开始到所在源文件结束位置。习惯上,全局变量首字母常为大写。

#include<stdio.h>
int Max, Min;          //全局变量

void fun1(){
   int x , arr[10];    //局部变量
   ...
}

int A = 4, B = 5;    //全局变量,作用范围为从当前位置到源文件结束处。

void fun2(int a){
...
}

注:函数内部的局部变量若和全局变量同名,全局变量会被局部变量“屏蔽”。

全局变量作用范围的扩展 — extern
如上面代码块中的全局变量A,B, 函数fun1内部无法引用它,因为A,B是在fun1之后定义的,为了将A,B的适用范围扩展到fun1中,可以在fun1内部用extern进行申明。

#include<stdio.h>
int Max, Min;          //全局变量

void fun1(){
   int x , arr[10];    //局部变量
   extern int A, B;  //类型int可省   <=> extern A, B;   
   printf("%d, %d", A, B);
   ...
}

int A = 4, B = 5;     //全局变量,作用范围为从当前位置到源文件结束处。

void fun2(int a){
...
}

另外,extern也可以将全局变量的作用范围扩展到其他源文件中,只需要在其他文件中使用extern申明即可(文件放在同一路径下)。
但如果不希望本源文件中的外部变量(全局变量)被其他文件引用,可以在定义时用static申明,即使该外部变量只能为本文件所用。

file1.c
static int A;
....

file2.c 
extern int A;   //无法引用file1中的变量A;
...
2. 按存储类别

动态存储和静态存储。
动态存储:在程序运行期间随着函数的调用和返回,根据需要动态分配(释放)内存。比如,函数形参,函数内的自动变量(局部变量),函数调用时的现场保护和返回地址。
静态存储:在程序运行期间由系统分配固定的存储单元,在程序结束后才会释放。比如,全局变量,static声明的局部变量。

2.1 动态存储类别

  • auto 变量
void fun(){
 auto int a , b = 3;
 //  <=>
 int a, b = 3;    //auto可省
}

自动变量在函数调用时赋初值。

2.2 静态存储类别

  • 全局变量
  • static声明的局部变量
void fun(){
 static int a  = 3;    //函数调用结束不会释放a的内存,可将上次调用后a的值运用到下次调用。
}

静态局部变量在编译时赋初值,且不可被其他函数所引用。

猜你喜欢

转载自blog.csdn.net/weixin_39986952/article/details/89085891