1、数据类型
什么是数据类型?
在理解什么是数据类型之前,先看看汇编语言是怎么操作内存的,已知一块内存的首地址和内存大小,这块内存也就确定了,那么程序员操作内存就非常麻烦,在编写代码时发现经常需要使用 1 个字节大小,2 个字节大小,4 个字节大小的内存,可以创建几个模子,放内存中,就得到了 1 字节,2 字节,4 字节的内存空间,可以将这些模子理解为数据类型。
- 数据类型可以理解为固定内存大小的别名
- 数据类型是创建变量的模子
如图所示,char 就是一个模子,模子大小为一个字节,将这个模子放到内存中就得到一字节的内存,这个过程就是定义变量的过程。
2、变量的本质
数据类型就是一个模子,模子放到内存中就得到了一块实际的内存,要操作这个内存,就给它起个名字,变量就诞生了。
- 变量是一段实际连续存储空间的别名
- 程序中通过变量来申请并命名存储空间
- 通过变量的名字可以使用存储空间
如图所示,地址 3000-3004 空间中存放的内容是 2,这段内存的别名为变量 i,变量 j、k 同理。地址3100-3104空间中存放的内容为 3004,3004 为一个地址(变量 j 的地址),所以变量 p 是一个指针,由此可见,指针没什么特殊性,就是存放的内容是一个地址罢了。
3、编程实验
实验1:类型与变量的关系
//1-1.c
#include <stdio.h>
int main() {
char c = 0;
short s = 0;
int i = 0;
printf("%ld, %ld\n", sizeof(char), sizeof(c));
printf("%ld, %ld\n", sizeof(short), sizeof(s));
printf("%ld, %ld\n", sizeof(int), sizeof(i));
return 0;
}
可见数据类型和变量的占用的内存大小是一样的。
实验二:自定义类型与创建变量
//1-2.c
#include <stdio.h>
typedef int INT32;
typedef unsigned char BYTE;
typedef struct _tag_ts{
BYTE b1;
BYTE b2;
short s;
INT32 i;
}TS;
int main() {
INT32 i32;
BYTE b;
TS ts;
printf("%ld, %ld\n", sizeof(INT32), sizeof(i32));
printf("%ld, %ld\n", sizeof(BYTE), sizeof(b));
printf("%ld, %ld\n", sizeof(TS), sizeof(ts));
return 0;
}
4、总结
- 数据类型的本质就是一个模子
- 数据类型代表需要占用的内存大小
- 变量的本质是一段内存的别名
- 变量隶属于某一种数据类型
- 变量所在的内存大小取决其所属的数据类型