【嵌入式C语言】数据存储与数据类型理解
1.ASCII码是什么?
ASCII码是计算机用来表示字符的一个数,也就是说只有字符才有ASCII码,比如我们说1的ASCII码是49,是指字符’1’,而不是整形1。ASCII码的形式可以是十进制、十六进制等,这个表示形式是对程序员来说的,比如’1’的ASCII码十进制表示为49,十六进制形式为0x31,这都是相对于程序员来说的,他们在计算机中的存储都是01这种二进制形式的,因为计算机只有01(程序中的各种进制、类型都是给程序员看的,对计算机来说只有01,进制也好类型也好,都是对计算机所存储的一段01的解释而已,我们用十六进制去解释这段01数据或用十进制来解释这段01数据)。
所以,ASCII就是字符的一种表示,每个字符都对应一个ASCII码,具体的ASCII码和字符对照表随处可见,可自行百度。
2.数据类型是什么?
C语言中有很多数据类型,char,int等等。数据类型其实是对内存的一种解释,众所周知,数据据类型可以定义变量
int a; //整形
char b; //字符型
变量是内存的名称,比如上面的a和b都是一块连续内存块的名称,它就相当于房间的门牌号,每个门牌号(变量名)代表一个房间(内存),而数据类型告诉我们如何解释这个内存:a是int型,表示这块内存占据4个字节;b是char型,表示b代表的这块内存占1个字节。这就是说数据类型告诉我们这块内存的大小,内存大小不同,所代表的数据范围也就不同,在嵌入式开发中,我们经常要对位操作,比如unsigned char 是我们经常使用的一种数据类型,他是一个八位的数据类型,可表示0~2^8-1。所以理解数据类型的本质对嵌入式开发很重要。开发板的存储是有限的,能用8位(unsigned char)解决的就不要用int或unsigned short等,不然可能程序太大,最后内存超了,导致程序崩溃。
3.指针类型与指针步长
指针也是一个变量,一般占4个字节,指针变量的类型决定了指针的步长
int* a;
char* b;
指针本身也是一个变量,不管是int型还是char型,他都是4字节,只不过他的步长不同。前面说过,数据类型告诉程序员如何解释一块内存,这里的int* 说明指针变量a所指向的内存空间是存放的int型变量,a每次移动1,内存移动8字节;而指针变量b是char* 类型,说明b指向的内存解释为char类型,b每次移动1,内存移动1字节。这就是指针类型的含义。