“2[tempcc]”
就相当于[tempcc]2
“((unsigned char)3)[(int*)tempcc])”
我觉得,C编译器目前对数组的处理,都是以一个标识符记录数组的基址(汇编时可能将这个地址存在基址寄存器中),也就是说不管把这个变量放在哪里,而偏移的计算则需根据数组类型(这个在定义数组时,连同标识符的名称一起记录了)乘以元素索引得到,即sizeof(int)*3,和索引的类型无关,所以我分析可能会指向数组后面的某一单元(值未定义)。
“2[tempint]”
和上面同理。
“((unsigned char)3)[(unsigned char*)tempint])”
根据上面原理,在little-endian机上结果为0(即int型5的3号字节)
“(-1 >= (sizeof(buf) - 16))”
sizeof返回size_t型整数,其定义为:
typedef unsigned int size_t;
所以比较时,会把-1转换为无符号数与之比较,当然结果为真,so pint fuck。
--------------------next---------------------
阅读(518) | 评论(0) | 转发(0) |