C语言可以从任意类型到任意类型的转换吗

如题所述

简单来说,可以。所以要转换的时候要小心,没有必要就别做类型转换。

对于系统的原生类型,比如 int,float 这种,内部有特定的内存管理方式。在做强制转换时有时候会改变实际内容,比如,float a = (int) b; 可以这样打印出来这两个变量的内存里的内容,unsigned char * aa = (unsigned char *)&a; unsigned char * bb = (unsigned char *)&b; 可以看到 a 和 b 的内存里储存的内容。更具体的 float 类型定义可以去网上搜搜。这个转换是由编译器做出的,而且根据 float 的定义还会有精度上的一些限制,参考这个帖子

对于自定义的结构体类型,做类型转换一般不会引起内存变化。所有数据都是保存在内存中的一段内容,而结构只是用来引用这段内容的组织方式。所以你可以任意调整引用的方式,也就是做类型转换,但有没有意义是另外一回事。有时候,为了达到一些某些目的,会对类型进行转换。比如创建线程的函数 

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,  void *(*start_routine) (void *), void *arg);

对于线程库来说,它并不知道每个线程要处理的数据是怎么样的,所以只能用 void * 传入一个指针,由使用者自己根据传入的数据类型在线程函数里做相应转换。

温馨提示:答案为网友推荐,仅供参考
相似回答