数组转换为长指针?

时间:2014-10-18 01:40:29

标签: c

long long a64[10];
long k32, *p32;
p32 = ((long *) &a64[k32]) + 1;

我不明白最后一行。什么是p32完全指向?

1 个答案:

答案 0 :(得分:1)

整个事情得到指向数组中k32 nd元素的后半部分的指针。

数组元素是long longlong long的一半是long。通过将long long *指针转换为long *然后递增1来找到后半部分。这将为您提供指向下半部分的指针。

           a64[k32]       // the k32'nd element of the array     type: long long
          &a64[k32]       // address of the k32'nd element       type: long long *
 (long *) &a64[k32]       // that address re-cast to long *      type: long *
((long *) &a64[k32] + 1)  // the second half of the k32'nd item  type: long *

这不是完全可移植的。使用int32_tint64_t代替longlong long会更安全。它还假定一个特定的字节序。