C陷阱与缺陷笔记

1.当计算机启动时,硬件调用首地址为0位置的子例程:

(*(void(*)())0)()
解释:
从里面往外看,先看里面的 void(*)(),这是个函数指针类型,这种类型的对象是函数,该函数无参数和返回值(即void)。
再往外一层,(void(*)())0,这是个强制转化,即将0强制转化成函数指针。
再往外一层,(*(void(*)())0)(),这是调用0地址处的函数。

利用typedef使表述更加清晰:

typedef void (*fp)();
(*(fp)0);
2.C语言运算符优先级(从高到低)

()  []  ->  . ;接下来是单目运算符(自右至左);然后是双目运算符,其中算术运算符最高,移位运算符次之,关系运算符再次之,接着是逻辑运算符,赋值运算符(自右至左,三目运算符即条件运算符(自右至左)高于赋值运算符);逗号运算符最后。

if(flags & FLAG != 0)...
r=hi<<4+low;
由于关系运算符高于逻辑运算符,第一条语句被解释为

if(flags & (FLAG != 0))...
第二条语句被解释为

r=hi<<(4+low);
3.struct 声明后别忘记加分号






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值