数据类型


数据类型:内存大小的别名

变量本质:一段连续存储空间的别名,程序中通过变量来申请并命名存储空间,通过变量的名字可以使用存储空间

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
",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
",abc); //输出:2  1++;1++;1++;1++;1++;2
21   fun2();
22   printf("%d
",abc); //输出:6  1++;2++;3++;4++;5++;6
23   return 0;
24 }


register指明向寄存器中申请空间,但不一定成功。register变量的值必须是cpu寄存器可以接受的值,不能“&”取地址,取地址,取的是内存的地址,这里的空间不在内存中,所以也就不能取地址运算。不能将全局变量声明为register属性,全局变量是程序全局静态区中分配空间的。register属性只能修饰局部变量,并且还不一定成功,但是一旦成功,访问速度很快,实时性要求高的程序中,普遍采用。

内在的趣味,表面的繁琐
原文地址:https://www.cnblogs.com/data1213/p/4819298.html