C语言-基本数据类型
一、C语言数据类型深度剖析
1.什么是数据类型?
-可以理解为固定内存大小的别名
-数据类型是创建变量的模子
-数据类型是对内存的格式化操作
上面三句话如何理解?
在以前的汇编语言时代,我们要存储一些数据时,比如操作一个数字“32”,我们需要自己去操作实际的虚拟地址范围,需要程序员自己牢牢得把控每个内存空间的利用,这非常不方便,也容易出错,后来随着C语言的出现,有了数据类型这一提法,我们把常出现的类似2、4、8等固定大小字节的内存空间取一个别名,方便以后的操作。
如上图所示,我们用类似模子样的东西去对内存空间划分,在32位机中,"char"占1个字节,"short"占两个字节,"int"占四个字节。
2.变量的本质
通过对数据类型的了解,我们来看看变量的本质是什么?
-变量是一段实际连续存储空间的别名
-程序中通过变量来申请并命名存储空间
-通过变量的名字可以使用存储空间
实例分析1:
1 #include <stdio.h> 2 3 int main() 4 { 5 char c = 0; 6 short s = 0; 7 int i = 0; 8 9 printf("%d, %d\n", sizeof(char), sizeof(c)); 10 printf("%d, %d\n", sizeof(short), sizeof(s)); 11 printf("%d, %d\n", sizeof(int), sizeof(i)); 12 13 return 0; 14 }
运行上面的代码我们发现变量跟数据类型所占有的内存空间是一致的,证实了我们的上面几点。
我们再来看看自定义数据类型跟变量的关系(即包含构造数据类型)
1 #include <stdio.h> 2 3 typedef int INT32; 4 typedef unsigned char BYTE; 5 typedef struct _tag_ts 6 { 7 BYTE b1; 8 BYTE b2; 9 short s; 10 INT32 i; 11 } TS; 12 13 int main() 14 { 15 INT32 i32; 16 BYTE b; 17 TS ts; 18 19 printf("%d, %d\n", sizeof(INT32), sizeof(i32)); 20 printf("%d, %d\n", sizeof(BYTE), sizeof(b)); 21 printf("%d, %d\n", sizeof(TS), sizeof(ts)); 22 23 return 0; 24 }
我们发现,构造数据类型同样符合上面的解释。