承接上集,我们学习了第一个C语言程序。接下来我们来学习数据类型!
首先,小C来介绍一些数据类型,他们分别是:
1.char__________________________ 字符数据类型
2.short (int)______________________ 短整型
3.int ___________________________ 整型
4.long (int) ______________________ 长整型
5.long long______________________ 更长的整型
6.float__________________________ 单精度浮点型
7.double________________________ 双精度浮点型
在C++里面有字符串类型,那么C语言里有没有呢?
答案是没有的!!!
那为什么会有如此多的类型呢?
这首先得从数据变量在内存的存储原理开始说起!
在定义变量的时候,我们会选择不同的数据类型来定义这个变量,然后再以这个数据类型在内存空间中开辟空间,这个开辟空间的大小就是数据类型的大小。因为我们所需要的变量空间的大小不一样,因此为了提高内存的利用率就有必要设置这么多空间大小不一的数据类型以供我们使用。
比如说:当我们想要创建年龄的变量时,我们通常都会用int类型来定义年龄
但是,我们都知道年龄不会超过4位数,因此,在对年龄进行选择数据类型时,就没有必要选占内存空间过大的数据类型。因为一个整型是4个字节,一个字节8个bit位。那么一个整型就可以表示2^32个十进制整数,因此,定义年龄可以用short类型。
那么,这些数据类型的大小到底是多少呢?
通过Visual studio进行调试之后,我们不难发现:
在控制台上出现了一串数字这些数字表示的是这些数据类型的大小,且他们的单位是字节。
此时,小谢同学深感疑惑,什么是字节呢?还有为什么int和long的数据类型的空间大小是一样的?
那么这就得从计算机原理说起了。我们都知道计算机是一种电气设备,也可以理解为是一种大型的电路。那么在电路中总是有电流流过。他们通常有两种情况,其分别是有电流流过(true)和没电流流过(false)。那么此时,我们用1和0来代表其有电流通过(true)和没电流通过(false),此时我们将这两种状态存起来,此时存储1或0的单位被称为bit位。bit位是计算机中最小的储存的单位。之后8个bit位就构成了一个字节。然后的然后,还请客官往下看
而为什么int和long的数据类型的空间大小是一样的?
int类型的空间大小<=long类型的空间大小。
有的编译器中,long的空间大小是8 byte,有的是4 byte。
在printf("%d\n",sizeof(char));在语句中,有一个操作符(运算符)是sizeof,他是用来计算变量或类型的大小,其单位为字节!这个运算符可以用于任何数据类型,这个操作符只关注空间的大小,并不会在乎数组内部是否有"\0"。("\0"的介绍在下面)那么,这时我要说一个函数和他进行区分,他们两个真的太像了。十分容易混淆。小谢同学就在这里栽过跟头。他就是————strlen。
strlen被包含在string的头文件中,他的功能是用来计算字符串的长度的(注意:这个函数只能计算字符串的长度)他关注字符串中是否有“\0”,他只计算“\0”前面的字符串长度!
关于“\0”的意义
"\0"是字符串的结束标志,在计算字符串的长度时,遇到"\0"就终止计算且"\0"不算做字符串的内容。
上述红粗体就是这两个的区别,下面就是关于sizeof与strlen的代码演示:
按下F10按钮即可进行调试
在监视窗口输入自己想要看到的变量或数组即可进行监视!
在上述的三张图中,图1与监视2,我们可以看见sizeof大小与数组中的元素个数有关,也就是数组的空间大小有关。
而这个strlen在图一中,arr2[]是3个,而arr1[]是11个,这是为什么呢?
这是因为arr2[]隐藏了一个”\0“,因此字符串长度为3。而arr1[]中的字符的个数为3。
为什么strlen中的个数为11呢?
这是因为strlen在计算arr1[]时发现'g'后面没有紧跟着“\0”,而是其他字符,这些字符是电脑随机给的(我也母鸡是什么字符),strlen对arr1[]的计算直至遇到“\0”才会停止计算。因此,这个字符串长度是一个随机值!(详细的在后面会讲)
此时,小谢同学有疑问关于单精度浮点型和算精度浮点型又有什么区别呢?
double类型的精度比float类型要高!
在使用float类型给变量赋值时,在数值后面最好加上f,以防编译器默认该数据类型为double型。
同时,在计算含有小数的计算式时,应该用float(或double)变量来对计算值进行接收(如果想得出整数可以用int的数据类型),除此之外,表达式中至少含有一个小数,不然会先按整型计算之后再将计算出来的结果变成float型(或double型)。如图所示:
关于这些数据类型的使用格式:
类型+变量名
记住:定义完变量名一定要记得初始化!!!
(这是编程的好习惯!!!)
好啦!数据类型搞完啦!如有错误,一定要告诉小谢同学!!!
谢谢大家啦^-^!