C语言重拾(1)概述及数据类型
C语言重拾
本科学过一点C语言,学得甚是马虎,恰好最近因为在学习STM32单片机,自觉C语言忘得太多,基础太差。所以结合C primer plus再过一遍C语言,重拾C编程技能。本系列文章会记录一些小的知识点以及学习中的疑问困惑及解决办法,流程就按照书的章节目录顺序写。
第2章 C语言概述
这次看的是C pp的第六版,大学看过一点第五版,一想也是几年前了。部分章节会跳过,重点在于一些重要的概念和语句使用方法。
2.2 示例解释
C语言中的6种语句:标号语句、复合语句、表达式语句、选择语句、迭代语句、跳转语句。
tips:如果输出时在屏幕上一闪而过,可以加 getchar(); 此函数读取下一个输入字符,程序等待用户输入。(如果有scanf函数,则需要多加对应次数的getchar();getchar()可读取换行符或让程序暂停,等待输入)
2.2.2 程序细节
#include是预处理器指令,编译器对代码进行预处理。
#include<stdio.h> 预编译代码的库文件
int main(void) C程序一定从main()开始执行 int是main()函数的返回类型 void表明本例中没有传递任何信息
void main() 这种格式,部分编译器允许,并非所有标准允许,故不推荐。
int num; 这行代码叫作声明
int是关键字,关键字是语言定义的单词,num是标识符,也就是一个变量、函数或其他实体的名称。
所有变量必须先声明再使用,具体数据类型在第三章介绍。
**** 突然发现写的好啰嗦,简单的事情弄得太复杂了… ****
2.6 多个函数
/*一个文件中包含两个函数*/
/*butler:男管家*/
#include <stdio.h>
void butler(void); //函数原型,告知编译器在程序中要使用该函数;
int main(void)
{
printf("I will summon the butler function.\n");
butler(); //函数调用
printf("Yes.Bring me some tea.\n");
return 0;
}
void butler(void) //函数定义,即函数本身源代码
{
printf("You rang,sir?\n");
}
C90标准加入了函数原型,这是一种声明形式,告知编译器正在使用某函数,所以也叫做函数声明。它同时指明了函数属性,如本例中,第一个void表明函数没有返回值(通常被调函数会向主调函数返回一个值,butler()函数没有),第二个void表明butler()函数中不带参数。
2.8关键字和保留标识符
第3章 数据和C
数据类型这块自己学得不清不楚的,还是重点学习一下(单片机还有can通信的时候也都用到过,稀里糊涂地写的程序…)
3.3 数据:数据类型关键字
不同数据类型也有差异,一些数据类型表示数字,一些表示字符,C通过识别一些基本的数据类型来区分和使用这些不同的数据类型(如,42是整数,42.100是浮点数),而变量在声明时就应指定其类型。通过关键字定义的数据类型,按储存方式可分为两类:整数类型和浮点数类型。
位、字节和字:最小存储单元是位(bit),用于储存0或1。字节(byte)在衡量存储单位时,均为8位1字节。字是设计计算机时给定的自然存储单位,个人计算机的字长由最初的8位增至16.32.直到目前的64位。计算机字长越大,其数据转移越快,允许的内存访问也更多。(* 位操作在第十五章 *)
3.3.3 浮点数
计算机将浮点数分成小数部分和指数部分来表示,而且分开储存这两部分。十进制下,7.0写作0.7E1,小数部分存0.7,指数部分存1。当然计算机在内部使用二进制和2的次幂储寸,而不是10的幂。对于浮点数和整数类型,在一些运算时,浮点数损失的精度更多(如两个很大的数相减)。因为在任意区间内有无穷多个实数,所以浮点数不能表示区间内的所有值,通常只是实际值的近似值,如7.0可能被存为6.99999。
3.4 C语言基本数据类型
3.4.1 int类型
int为有符号整型,取值可以为正整数、负整数或零。其取值范围依计算机系统而异,一般而言,储存一个int要占用一个机器字长。早期,16位PC机用16位来储存一个int值,其取值范围是-32768~32767(2^16)。现在的计算机有32位.64位的,故有的用32位储存一个int值,有的用64位。
显示八进制与十六进制的数:
十进制用 %d 八进制用**%o** 十六进制用**%x**
Ps:要显示各进制数的前缀0/0x/0X,必须分别使用%#o、%#x、%#X
3.4.2 其他整数类型
3.4.3 使用字符:char类型
char用于储存字符,但是本质上还是整数类型,实际上存的并非字符,而是ASCII码对应的数字。此处还有转义序列等概念。
3.4.6 float、double和long double
浮点数的表示类似于科学计数法(指数计数法),C标准规定,float类型必须至少表示6位有效数字,且取值范围至少是10-37~10+37。前一项规定float类型必须至少精确表示小数点后6位有效数字,如33.333333。(此处的疑问:六位有效数字是指小数点后六位嘛?数学概念中并非如此。用编译器自己printf,看起来都是小数点后六位)后一项方便储存幂数绝对值很大的数字。通常,一个浮点数要占用32位,其中8位用于表示指数的值和符号,另外24位表示非指数部分及其符号。
(关于这部分找到了网上的一个讲解,很细致:浮点数)
C语言提供的另一种浮点类型是double(意为双精度)。double和float最小取值范围相同,但是至少必须能表示10位有效数字。一般情况下,double占用64位而不是32位。默认情况下,编译器假定的浮点型常量是double类型的精度。在浮点数后面加上f或者F后缀可覆盖默认设置,编译器会将浮点型常量看作float型,如2.3f和9.11E9F。使用l或者L后缀,可将数字类型变为 long double类型,建议使用L,防止小写的l与数字1混淆。
小结
第一篇就先看概述和数据类型吧,写的也比较乱,只能是自己的一个学习记录&笔记,不能帮助到其他人…下一章打算直接跳到15章,学习位操作。