4.C语言的基础运用——关于变量
一、数据类型
如果有略微接触过C语言编程,那么我们都会对变量的定义非常熟悉,例如定义一个整型变量a,我们会用下面的程序来表示:
int a;
如果我们想对a进行赋值,那么只需要用一个等号即可
a=45;
那么下面我将按我的理解对常用的变量的类型,也就是数据类型进行阐述
1.整型
整型,顾名思义就是定义一个整数变量,他占用2个字节(占用字节数最好能记住),包括了从-32768~32767的所有整数(不同编译环境可能有所不同),如果你将一个整型数值赋予了这个范围之外的数据,程序是不会报错的,他可能会胡乱的随机显示一个数字,所以数据大小溢出也是我们后面在程序中找bug的一个点。
2.浮点型
分为单精度和双精度。浮点型和整型的区别就是他能存储小数。单精度(float)占用4个字节,双精度(double)占用8个字节。他们两个的唯一区别就是存储小数点后位数的多少,一般来说用float就够用了。
3.字符型
字符型(char)指的是单个字符(数字,符号或者字母),占用一个字节(可以顾名思义,字节就是一个字母符号啥的)
char a;
a='N';
如果对字符型变量赋值,一定要加单引号。
这里需要提一下ascii表,如下图

每一个允许被录入char类型变量的都有一个一一对应的ascii值和16进制值。我们所输入的每一个char类型的字符,在计算机和单片机中表现的是16进制,例如,如果我想让程序输出字符A,查上面的表可以看到16进制为41。
那么我们在赋值的时候直接输入0x41,或者输入ascii值65,以字符形式输出,他都会显示为字符A,如下图测试(有关输入输出在下一篇笔记,这里可以先不理解printf括号内的使用):

4、字符串类型
字符串就是表示多个字符组合在一起,用双引号赋值,例如
char x[]="dafsawef";
这里插叙一下数组的问题,具体的将在之后的笔记中提到。
简单来说,数组就和数学中的数列一样,用下标来表示一串不同的变量,比如

其他数据类型都可以用这种方式定义,上面程序的意思就是定义了a数组,数组里一共有三个变量分别为a0,a1,a2(下标从0开始,用中括号括下标)。
那么字符串其实就是另类的char类型的数组,字符串里的每一个字符,都可以单独的摘出来,例如:

字符串比较特殊,涉及到数组,如果不理解可以暂时先pass。
5、无符号型变量
包括无符号型整型变量,无符号型字符变量等
顾名思义,无符号型的意思就是不带符号,也就是没有负数。
如果有同学已经接触了单片机编程,我们能经常看见 unsigned char 或者 unsigned int这类定义,然后重定义类型名字后用u8和u16来代表(一个字节为8位,u8指的是8位,也就是1个字节,还记得前面说char和int是几个字节的吗)。

typedef其实就是给unsigned char 重新给了个名字,用u8来代替,因为unsigned char太长了不方便打出来,同样我们可以尝试给int重新命个名,如果你懒到连三个字母都不想打的话。
其实和有符号的变量差别不大,就是能表示更多的数字。比如有符号的整型能代表的范围为-32768-32767,那么无符号就能表示0-65535。至于为什么单片机程序里面喜欢用无符号类型,嘿,我也不知道,我已经把他看成一个约定俗成的玩意了,希望有人能补充说明一下。
二、变量的互相转换
在C语言中,有些变量之间可以互相转换,但特别注意:字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换
例如:
#include <stdio.h>
int main(){
int a;char b;double c;
a=650;
b=a;
c=a;
printf("a=%d,b=%c,c=%lf",a,b,c);
return 0;
}
输出为:

可以看见b出现了乱码。但是这里如果a的大小<=127,b还是能正常转换为ascii码,输出字符,类型转换是一个比较复杂的内容,具体文档可以查看C语言的类型转换
补充说明:我个人在数据类型转换时常用的函数时sprintf函数,感兴趣的可以去查一查这个函数的用法,这能在未来的一些项目中发挥不小的作用。

浙公网安备 33010602011771号