我已经过了this code,我注意到这个看起来很奇怪的演员
oldidt = (unsigned long long *)(*(unsigned long*)(oldidtr+1));
对我来说,看起来第一个演员正在影响+1
所以它将移动4个字节(一个指针),第二个演员表示结果为unsigned long long *
。内部演员的外壳中的明星是“获取此记忆”的明星。
+1
仍将是一个4字节的跳转。oldidt = *(oldidt+1);
会怎么样? (假设编译器不抱怨,并给出和执行) oldidt
的声明是:
static unsigned long long *oldidt;
我根据调用(左边是第二个)调用强制转换“第一个”和“第二个”。
答案 0 :(得分:2)
看起来这段代码使用了几个unsigned short int
来将指针存储在两半中。这假设unsigned short int
是指针的一半宽。代码从两个相邻的short中提取存储的指针,即数组的第二个和第三个成员,并将其解释为指向unsigned long long int
的指针。
因此,最后的强制转换是将整数重新解释为指针所必需的,而第一个(内部)强制转换用于从现有变量中读取不同类型的值,即从短整数(或者更确切地说,从两个相邻)读取短裤)。