《C陷阱与缺陷》读书笔记

多字符记号
  • 输入流到给定字符串,识别成记号后,会尽可能包含之后字符构成最长字符串作为记号
  • 组合赋值运算符是两个记号,如+=
单引号与双引号
  • 单引号是当中字符对照整数序列的值
  • 双引号是初始化一个无名数组指针包括挡住字符和一个附近二进制为0的字符
printf("Hello world\n");
//等价于
char hello[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\n', 0 };
printf(hello);
声明

变量声明=类型+对该类型求值的表达式

类型的模型=变量声明去除变量名和分号后用括号括起来

float *a();
//a是一个返回float指针的函数,模型为
(float *())

//调用地址0的函数
//调用变量
(*a)();
//a为返回void的函数的指针
void (*b)();
//模型为
(void (*)())
//将0转为此类型
(void(*)())0;
//调用转换后的变量
(*(void(*)())0)();
函数调用

需要参数列表,可无参数

f();//函数调用
f;//函数地址求值,不调用
表达式求值顺序
  • &&和||先求左边,左边为真才求右边
  • a?b:c b和c只求其中一个
函数参数转换

规则

  1. 比int短的整型转换为int
  2. 比double短的浮点转换为double
  3. 其余不转换
指针非数组

char指针变量是指向其数组第0个元素的指针

除法
q = a / b;
r = a % b;

保证

  • q * b + r == a
  • 绝对值r<绝对值b
  • 当a >=0且b > 0时,r >= 0

不一定保证

  • a为负数,q也为负
  • r >= 0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容