写C已经有一段时间了,今天听到有人说C的不同指针类型不能相互转化!我不相信,但毕竟对方资历比我深,慎重起见,只是笑过。
但一直想着这个问题,于是刚才写了一个简单的Demo,测试了C指针的性能!年轻就是要敢于质疑!
我还记得之前看过Windows程序设计时,很多函数使用了类似 以下的写法,所以才确信自己的想法!
void* p;
p=(void*)fs; // FILE* fs;
我对C指针的理解是:指针只是一个内存块,内存块存的值就是地址,可以只是一个byte,也可以是多个byte连成的内存块的首地址。C的结构体就是一内存块,结构体指针即是指向此内存块的首地址,而指针的类型,用来表示这个内存块的解析规则,如第一个域是char,第二个域是int,则调用struct_name->char_domain时,是首地址,而调用的是int域时,即是首地址+4(不是加1,有字节对齐的情况)。那么用任意的解析规则也是可以的!就是怕崩掉!编译器会阻止。不过不排除有谁能骗过编译器的情况啊!
此程序在win7 操作系统上测试通过,使用MinGW gcc 3.4.0编译器。