Chinaunix首页 | 论坛 | 博客
  • 博客访问: 818389
  • 博文数量: 756
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:40
文章分类

全部博文(756)

文章存档

2011年(1)

2008年(755)

我的朋友

分类:

2008-10-13 16:12:28

“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---------------------

阅读(475) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~