C语言数据类型

数据类型

总览图

作用

数据类型,也即变量类型,定义了变量所占内存空间规模大小的一个单位模板,它能够方便地让开发者对数据进行定位处理。

本质

数据类型的本质为一段内存地址的别名,表示为变量的起始内存地址+偏移量(数据长度)。

表示方式

基本数据类型:

short、int、long、char、float、double

自定义类型:

  1. typedfe 关键字定义
  2. #define宏定义
  3. struct结构体、union联合体定义
  4. enum枚举定义

使用方式

格式:

数据类型 变量名字;

属性:

即变量存储类型,添加在变量名以及变量类型之前,旨在说明该变量的属性,即作用范围,包含cuto、static、register。

auto

在c语言中,局部变量定义的时候编译器会在变量类型前默认添加auto,以此说明定义了一个分配在栈区的局部变量,开发者在定义变量时可省略该关键字,在c11中auto已被废弃。

注意:非C++11的cuto。

1 //auto int a=0;//全局变量不可使用auto,编译提示有坏的存储类
2 int main()
3 {
4     auto int b=0;
5     int c=0;//同b的定义       
6     return 0;
7 }

static

修饰局部变量:

定义静态局部变量,在静态存储区分配内存空间,改变变量的存储方式,控制变量的生命周期和作用域,并且只会初始化一次。

 1 void func1()
 2 {
 3     static int a=0;
 4     printf("%d,a++);//输出12345
 5 }
 6 void func2()
 7 {
 8     int a=0;
 9     printf("%d,a++);//输出11111
10 }
11 int main()
12 {
13     for(int i=0;i<5;i++)
14     {
15          fun1();
16     }
17     //i=100;
18     //编译报错,i在作用域外不可访问
19   //但i的栈未销毁,内存还在,在其作用域外,i的栈可能被用作它用
20     for(int i=0;i<5;i++)
21     {
22         fun2();
23     }
24      return 0;
25 }
修饰全局变量和函数

限制其作用域为本文件。

 1 //test1.cpp
 2 statiic int a=0;
 3 int b=0;
 4 void func1()
 5 {
 6     printf("%d",a);
 7 }
 8 static void func2()
 9 {
10     printf("%d",b);
11 }
12 //test2.cpp
13 extern int a;
14 extern int b;
15 int main()
16 {
17     printf("%d",a);
18     //printf("%d",b);//编译出错,提示无法解析的外部符号
19     fun1();//输出a的值0
20     //fun2();//同上,编译出错,提示无法解析的外部符号
21      return 0;
22 }

register

定义寄存器变量,变量存储于寄存器中,因为数据在寄存器中的读取速度会高于内存,可用于提高程序的执行速度。

注意:变量的值必须是单个寄存器能够接受的值,并且仅仅是发送请求,由编译器判断是否采取将其放弃寄存器。不可以对其取地址&,因为不存在地址。

//register int nmb;//编译报错有坏的存储类
//register 不可定义全局变量
int main()
{
    register int num=0;
    //int* p = &num;//CPU当中变量时没有地址
    do
    {}while(num++!=9999999;
    return 0;
}

隐含属性

生命周期

变量的地址存在的有效时间。

作用域

对代码进行语法层面的隔离,避免重定义等,一般采取{...}进行定义。

纯手打,如有错,望指教!

posted on 2018-12-09 22:05  夜深矣  阅读(50)  评论(0)    收藏  举报

导航