《C陷阱与缺陷》学习笔记--第二章

2.1 理解函数声明

先区分float *g(), (*h)();
    float *g();   g是一个返回值类型为指向浮点数的指针
    float (*h)(); h是一个函数指针,返回值为浮点型

分析:((void(*)())0)();

使用typedef简化(*(void(*)())0)()
typedef void (*tmp)();
(*(tmp)0)();     ///这里0代表指向0地址的进程或者函数

对于(*(tmp)0)(); 这里tmp代表强制转换类型,因为0不能作为一个函数指针
声明一个函数指针:typedef void (*tmp)();
通过这样声明,经过 * 作用后的结果才能作为函数被调用

2.2 运算符的优先级问题


很明显赋值运算符的优先级小于三目运算符的

2.3 注意作为语句结束标志的分号

在if 、else、while、结构体、return 后面注意分号是否多写或者少写

2.4  switch语句

switch(t){
    case 1: 语句;break;
    case 2: 语句;break;
    case 3: 语句;break;
    default;
}

注意每一个语句后面都有一个break,还有default,当然如果特殊情况可以不写,当时要注释说明

2.5 函数调用

C语言要求:在函数调用的时及时函数不带参数也应该包含参数列表

f(); 是函数调用语句

f ; 这个语句计算函数 f  的地址,并没有调用函数

2.6 “悬挂”else引发的问题

else 始终与同一对括号内最近的未匹配的if结合


练习:

2-1  C语言允许初始化列表中出现多余的逗号,请问有什么特性?

这样在编译器处理的时候可以更加方便的处理列表

比如我们平时做acm题目的时候,在一行里面有多个输出,每两个数字中间有一个空格,最后换行

这里要是最后一个数字后面也可以输出一个空格的话是不是可以减少一些工作量啊,同样的道理适用于本题

2-2  C语言作为语句的分隔符带来了很多的问题,那么请问换做其他语言的分隔语句的方法是怎么样的?有没有缺陷

对于python,是每一行作为一个语句,可以理解为是换行符作为语句的分隔符

这样的缺陷呢:就是一行无法写入多条语句来减少代码行数,让程序变得更加精简


猜你喜欢

转载自blog.csdn.net/Summer__show_/article/details/80048734