首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一行中应用两个显式指针类型转换?

在一行中应用两个显式指针类型转换?
EN

Stack Overflow用户
提问于 2012-11-30 14:33:15
回答 1查看 127关注 0票数 3

我正在读the code for _start as packaged with FreeBSD,对我看到的一些特别的东西很好奇。第61行将字符**转换为空*,然后立即转换为长*。我见过a similar StackOverflow question,但它不适用于这里,因为所有的指针都是相同的大小。谁能告诉我为什么这条线会投射两次而不是一次?

EN

回答 1

Stack Overflow用户

发布于 2012-11-30 14:53:33

代码语言:javascript
运行
复制
ISO c99 : 6.3.2.3 Pointers 

1

“指向void的指针可以转换为指向任何不完整或对象类型的指针,也可以从指向任何不完整或对象类型的指针转换为指向void或对象类型的指针;结果应与原始指针相等。”

7

指向对象或不完整类型的指针可以转换为指向不同对象或不完整类型的指针。If the resulting pointer is not correctly aligned for the pointed-to type, the behavior is undefined。否则,再次转换时,结果应与原始指针相等。当指向对象的指针转换为指向字符类型的指针时,结果指向对象的最低寻址字节。连续递增结果,直到对象的大小,产生指向对象剩余字节的指针。

第二段说你可以将任何指向一种类型的指针转换为另一种类型,但是如果结果指针没有对齐,那么就使用behaviour is undefined

虽然第一段没有提到任何关于undefined behaviour的事情。

因此,我认为将void *转换为任何类型的方法比直接从一种类型转换为另一种类型更安全。

因此,您看到的是相同的情况。

编辑:我不认为这是你问题的确切答案,但至少你可以看到上面提到的c99标准中的相关内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13640161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档