2.语法陷阱
- 理解函数声明
- C变量声明由两部分组成
- 类型
- 一组类似表达式的声明符(declarator)
- 变量声明:float f;
- 函数声明:float ff();
- 表达式ff()的求值结果是一个浮点数
- 指针声明: float *pf;
- *pf是一个浮点数也就是说pf是指向浮点数的指针
- 组台声明: float *g().(*h)();
- g().(h)()是浮点型表达式,()结合性优先级高于即g () ->*(g()) g是个函数该函数返回值类型是指向浮点数的指针。同理h是一个函数指针,h所指向的函数的返回值为浮点型。
- ((oid()())0);
- 调用0地址位置的子例程
- (void(*)0)指向返回值为void类型的函数的指针
- 可以使用typedef来解决函数指针类型声明问题
- 运算符优先级问题
- 同—优先级的运算符,运算次序由结合方向所决定。
- 简单记就是:!>算术运算符>关系运算符>&&>|>赋值运算符
- 语句结束标志;
- f();表示单独—个语句了。
- eturn遗漏了—个分号;
- 声明的结尾仅跟着函数定义时;遗漏
- 编译器可能会将声明类型视为函数的返回值
- switch
- case 中break添加的合理性
- 函数调用
- c语言要求在函数调用时即使函数不带参数,也应该包括函数列表。
- 是挂else问题
- else始终与同—对括号内最近的为匹配的if结合
- c语言中允许初始化列表中出现多余的逗号。
- 推荐一个零声学院免费教程,个人觉得老师讲得不错, 服务器课程