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

 我来答
paniarch
2017-11-02 · TA获得超过288个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:149万
展开全部

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

对于系统的原生类型,比如 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 * 传入一个指针,由使用者自己根据传入的数据类型在线程函数里做相应转换。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式