加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 编译器如何理解指针类型?

发布时间:2020-12-16 10:45:24 所属栏目:百科 来源:网络整理
导读:c编译器如何理解指针类型?我知道指针的大小等于OS的WORD(32或64).那么它是否存储了关于类型的32(或64)位的一些信息?只是因为你不能在一个类型上有一个指针并为该指针分配另一个具有不同类型的指针. 解决方法 指针通常只是基于x86架构的内存地址(我不知道其
c编译器如何理解指针类型?我知道指针的大小等于OS的WORD(32或64).那么它是否存储了关于类型的32(或64)位的一些信息?只是因为你不能在一个类型上有一个指针并为该指针分配另一个具有不同类型的指针.

解决方法

指针通常只是基于x86架构的内存地址(我不知道其他架构).编译器在编译时使用不同的指针强制执行类型安全 – 例如,将指针指向char指定为指向int的指针是没有意义的,特别是因为指向的对象是不同的大小(所以你要如果你访问它们就抓住随机内存).您可以显式地覆盖它,并使用reinterpret_cast< T>或其他类型的强制转换(如static_cast< T>)将任何指针指定给任何其他指针.和dynamic_cast< T> (后两者通常被推荐,因为它们“更安全”,但每种都有其用途).

因此,在机器级别,内存地址只是一个内存地址,CPU将尽职尽责地执行任何访问或调用.然而它很危险,因为你可以把类型混淆起来并且可能不知道它.编译时检查有助于避免这种情况,但通常没有关于运行时指针本身内存储的实际类型的任何信息.

使用迭代器(由STL提供的指针包装器)的一个优点是许多实现都有许多额外的检查,可以在运行时启用:比如检查你是否正在使用正确的容器,当你比较它们时它们是相同的迭代器的类型,等等.这是使用迭代器而非指针的主要原因 – 但标准并不要求它,因此请检查您的实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读