- 论坛徽章:
- 0
|
本帖最后由 rollin7 于 2013-06-05 16:09 编辑
zhouqi5063 发表于 2013-06-05 15:11 ![]()
我觉得size应该是用来指示每个元素的大小,所以答案应该是这样:(void *)&seq->array.array[((seq->head + ...
size确实是用来指示元素大小的,但在此处是用不到size的,因为(void **)已经强制转换了,实际上转换后的array可以理解成为 void *array[n], 即array是含有n个指针的数组,
由于指针在32位机器上需要4个字节,因此
((void **)seq->array.array)[(seq->head + i)%seq->array.length] 它表示返回一个指向
(char)array[(seq->head + i)%seq->array.length *sizeof (void *) ],
(char)array[(seq->head + i)%seq->array.length *sizeof (void *) +1],
(char)array[(seq->head + i)%seq->array.length *sizeof (void *) +2],
(char)array[(seq->head + i)%seq->array.length *sizeof (void *) +3]
这四个字节组合成的地址的指针
(void *)&seq->array.array[((seq->head + ... 是不正确的,它表示返回一个指向seq->array.array[((seq->head + ... ]地址的指针 |
|