C Primer Plus学习笔记02

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

你可能感兴趣的:(C Primer Plus学习笔记02)