数据和C
作为《C Primer Plus》第三章的内容,主要是讲的C语言的基本数据类型,说实话,挺绕的,对于有一定基础的我来说,看了半天,依旧是半知半解,做不到完全理解,因为自学嘛,相比于有老师教是蛮难搞的。就算是老师教呢,大部分还是挑重点,是为了期末考试不挂科为目的的。我是想仔仔细细的学习的,所以我把书上这一章的内容读了一遍,说实话,给我读困了。但是毕竟还处于入门阶段,以后用到的话,再往回翻吧,总不能一开始就把学习的积极性打消吧。不影响本章练习,或者说简单的后续就可以,对于复杂一些的东西,比如为了程序的运行速度去调整变量的数据类型,后续用到咱再说。此外,本章还有不少小且杂的知识,最好在书上标记出来,日后用到往回翻也好找一些。毕竟,书读百遍其义自见,想要学好的话多看几遍书是指定不可避免的。
那么好,正式开始说,本章一开始,他给了一个示例程序,这个书上的解释都很全了,慢慢看,慢慢感悟就好,没啥东西,只是第一次出现交互式的程序,留意一下。
scanf()函数的使用,读取键盘的输入,对于函数参数的意义说明,书上都有写。对于这些较为基础的内容就不说了,如果基础一点的东西还不会,去B站搜一搜视频,找个老师跟着看吧(适合新手那种)。
声明数据类型的关键字的话,看一眼,浅记一下。现阶段,int类型基本上可以满足大部分要求,这里说一下之前学习C语言没有说过的内容。C语言提供了三个附属关键字修饰基本数据类型:short、long和unsigned。经过排列组合呢,它们可以组成很多数据类型,比如short int、long int、long long int、unsigned int、unsigned long int等等,有可能会懵,以上都是整数类型,只是表示允许的取值范围各有不同,绕一点而已,根据需要选择即可。对于不同的操作系统,范围可能也会有偏差,如果考虑节省空间的话,在仔细琢磨一下需要用那个数据类型。有的时候,long int数据类型的数据后面会带一个L区分一下,例如6L,称之为常量后缀。如果整数超出了相应类型的取值范围,会出现整数溢出的情况,会重新从取值范围的起始点开始取值。
printf()函数中的转换说明,记吧,记不住也没关系,用到在往回翻呗,见多了就记住了。
%d: 十进制数据(int类型的话直接用就可以)
%o: 八进制数据
%x: 十六进制数据
展示各进制数的前缀0、0x、0X:%#0、%#x、%#X
%f: 十进制的float类型,double类型
%ld: long类型即long int类型
%u: unsigned int类型
%c: char类型
%e:指数计数法的浮点数
注意:C语言允许使用大写或小写的常量后缀,但是在转换说明中只能用小写。转换说明还有很多种组合方式,在此就不一一概述了,在日后的使用中用到再说。
char类型:字符类型 ; 用法:char a = ‘A’;转义字符呢,老规矩,老老实实记吧。
_Bool类型,没什么好说的,逻辑值true(1)和false(0)。再就是可移植类型,这个说实话不太理解,以后用到的话再说吧。
面向金融和数学的程序经常使用浮点数,C语言中的浮点类型有float、double和long double类型。对于浮点数的计算,运用不好的话会出现很多问题,比如损失精度、上溢、下溢,出现特殊值(inf或infinity、NaN),日后出现类似问题再研究。许多科学和工程计算都要用到复数和虚数,头一次听说,也是用到的时候再说吧。
sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。以后讲运算符的话应该会详细说明。
说一些日后开发中可能会遇到的问题,把一个类型的数值初始化给不同类型的变量时,编译器会把值转换成与变量匹配的类型,将会导致部分数据丢失。不要把初始化的变量和未初始化的变量放到同一条声明中。变量命名时,最好在变量名中体现其类型,例如i_前缀表示一个int类型的变量,int_age。
此外,前文讲过,C语言通过函数原型机制检查函数调用时参数的个数和类型是否正确,但是,该机制对于printf()和scanf()是不起作用的,这两个函数的参数是可变的,如果程序的结果不理想或者出现意想不到的值,检查一下这两个函数的参数。
编程练习
章节后的编程练习,较简单的直接略过了,挑几个复杂一点的做一下。
关于第三章的内容,差不多就总结了这些,虽然前面的很多概念没有细究,但是根据章节后面的编程练习来看,丝毫不影响日常的使用,所以如果以后用到那些细节的话,让我们再回头,收拾旧山河。