1.如果要打印无符号整数,格式说明符可以用u替换d 比如说 unsigned long可以表示为 %lu unsigned short可以表示为 %hu(h表示short类型)
2.C把一个字节(byte)定义为char类型所使用的bit数 但是C并没有byte这种数据类型
3.可以使用数值编码直接给char赋值:
char ch = 65;
但是不推荐这么做 推荐用如下方式:
char ch = 'A';
4.C将诸如'B'这样的字符常量视为int类型而不是char类型
在int类型为32位和char类型为9为的ASCII系统中,char grade = 'B'意味着'B'作为数值66存储在一个32位单元中,而赋值后则把66存储在一个8位的单元里
利用这个特性 可以定义一个字符常量'FATE',这将把这四个独立的8位ASCII码存储在一个32位单元中。
如果把这个字符常量赋给一个char变量,那么只有最后8位起作用,变量值将为'E'
5.常用的转义字符:
- \a 警报
- \b 退格
- \r 回车
- \0-- 八进制值
- \x-- 十六进制值
6.C99中的_BOOL其实也是一种整数 在C中 true表示1 false表示0
7.inttypes.h头文件用来确切指定整数的位数,方便跨平台:
- int32_t:有符号32位整数
- uint32_t:无符号32位整数
- int_least32_t:至少为32位的有符号整数
- int_fast32_t:速度最快的32位有符号整数
8.C标准规定 float至少能表示6位有效数字 double至少能表示10位有效数字
9.默认情况下,编译器将浮点数常量当做double类型,通过添加一个f或者F可以使编译器将其当做float类型
10.%e用来打印指数标记法的浮点值
11.整数上溢会导致从头开始计算
浮点数上溢会导致输出inf或者infinity
浮点数下溢会导致精度丢失
12.scanf如果参数是数组 不需要带上& 否则需要带上&
printf则没有这么麻烦
13.一个char数组如果代表一个字符串 那么它的末尾会多一个\0字符 代表字符串的结束
在进行sizeof计算的时候 会算上这个特殊字符占据的字节
但是如果用string.h中的strlen函数 则不会计算上它
14.scanf在读取字符串的时候 会在遇到的第一个空白符 制表符 或者 换行符处停止读取
15.C的预处理器还允许你定义常量 一般的格式如下:
#define PI 3.14159
将常量大写是一个良好的编程习惯
“#define”语句也可以定义常量字符或者常量字符串 如下所示:
#define BEEP 'a'
#define OOPS "Now you have done it!"
16.C99加入了另一种创建符号常量的办法 使用const关键字 如下:
const int MONTH = 12;
17.C头文件limits.h和float.h分别提供有关证书类型和浮点类型的大小限制的详细信息
18.printf中的标志:
- ‘-’:左对齐
- ‘+’:有符号且为正 补+号 为负补-
- ‘空格’:有符号且为正 补空格 为负补-
- ‘#’:打印8进制 16进制的时候 加上相应的标识
- ‘0’:用前导零填充宽度字段
19.scanf函数中第一个参数字符串中如果你加了空格 那么他会跳过你下一个输入项之前的所有空格
如果你加了别的字符,那么它要求你输入下一个输入项之前需要有这个字符
20.printf里的*可以用来替换字宽或者精度项,这就需要你在参数里面使用具体的变量代替
scanf里的*则会使函数直接跳过相应的输入项目 比如
scanf("%d %d %d",&n);
你如果键入 1010 1011 1012 则n为1012