C语言数据类型
数据类型
总览图

作用
数据类型,也即变量类型,定义了变量所占内存空间规模大小的一个单位模板,它能够方便地让开发者对数据进行定位处理。
本质
数据类型的本质为一段内存地址的别名,表示为变量的起始内存地址+偏移量(数据长度)。
表示方式
基本数据类型:
short、int、long、char、float、double
自定义类型:
- typedfe 关键字定义
- #define宏定义
- struct结构体、union联合体定义
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 = #//CPU当中变量时没有地址 do {}while(num++!=9999999; return 0; }
隐含属性
生命周期
变量的地址存在的有效时间。
作用域
对代码进行语法层面的隔离,避免重定义等,一般采取{...}进行定义。
浙公网安备 33010602011771号