变量本质:一段连续存储空间的别名,程序中通过变量来申请并命名存储空间,通过变量的名字可以使用存储空间
typedef:为数据类型取别名:(而不是创造了新的数据类型)
typedef unsigned char BYTE;
typedef int int32;
typedef struct students
{
int a;
char b;
int32 c;
}stud;
struct students xiaoming;==>stud xiaoming;
——auto,static,register分析:
c语言中的变量可以带有自己的“属性”,这就要用到属性关键字
auto即是C语言局部变量的默认属性
static指明变量的“静态”属性,同时具有“作用域限定符”的含义:
static修饰的局部变量存储在程序的静态区;static修饰的全局变量作用域只是声明的文件中,static修饰的函数作用域只是声明的文件中。
//*******test1.c********static int test1_g =100; //将全局变量声明为static,表示该变量的作用域仅仅局限于当前文件 int test1_g_func() //定义一个函数返回上述全局变量的值 { return test1_g; }
1 //*******test2.c********2 extern int test1_g_func(); //将另一个文件中的函数在此文件声明 3 4 int main()5 {6 printf("%d\n",test1_g_func()); //通过函数访问另一文件中的static属性的全局变量7 return 0;8 }
static修饰的局部变量,在程序静态数据区中分配空间,并且只能被赋值一次,生命周期是全局的,整个程序的执行完之后才撤销空间。
1 //*******test3.c******** 2 int fun1() 3 { 4 static int abc=1; 5 for(int i=0;i<5;i++) 6 abc++; 7 return abc; 8 } 9 int fun2()10 {11 int abc=1;12 for(int i=0;i<5;i++)13 abc++;14 return abc; 15 }16 17 int main()18 {19 fun1();20 printf("%d\n",abc); //输出:2 1++;1++;1++;1++;1++;221 fun2();22 printf("%d\n",abc); //输出:6 1++;2++;3++;4++;5++;623 return 0;24 }