对结构体指针强转,转为其属性类型指针

在许多Objective-C的底层库中,发现许多直接对某个结构体指针强转,转为其某个属性的指针,并对这个属性进行操作,参考探索 Block (一) (手把手讲解Block 底层实现原理)

#include <stdio.h>

struct __Imp {
    float Flags;
    int ptr;
};

int main(int argc, const char * argv[]) {
    
    struct __Imp imp = {12};
    
    float *num = (float *)&imp;
    
    printf("%f\n", *num);
    
    printf("%p\n", &imp);
    printf("%p\n", &(imp.Flags));
    
    return 0;
}

结果为:

12.000000
0x7ffeefbff5a8
0x7ffeefbff5a8

由上可见,可以将struct __Imp类型的地址&imp,强转为被float *指向的地址。从打印的结果看,也证明这两个地址一样。
但是必须注意到,只能强转为第一个被声明的属性类型指针。
至于这样强转的目的,是为了减少代码量。

猜你喜欢

转载自www.cnblogs.com/luopengfei14/p/9640710.html