概述c
编译器如何
理解指针类型?我知道指针的大小等于OS的WORD(32或64).那么它是否存储了关于类型的32(或64)位的一些信息?只是因为你不能在一个类型上有一个指针并为该指针分配另一个具有不同类型的指针. 指针通常只是基于x86架构的内存地址(我不知道其他架构).编译器在编译时使用不同的指针强制执行类型安全 – 例如,将指针指向char指定为指向int的指针是没有意义的,特别是因为指向的对象是不 c编译器如何理解指针类型?我知道指针的大小等于OS的WORD(32或64).那么它是否存储了关于类型的32(或64)位的一些信息?只是因为你不能在一个类型上有一个指针并为该指针分配另一个具有不同类型的指针.解决方法 指针通常只是基于x86架构的内存地址(我不知道其他架构).编译器在编译时使用不同的指针强制执行类型安全 – 例如,将指针指向char指定为指向int的指针是没有意义的,特别是因为指向的对象是不同的大小(所以你要如果你访问它们就抓住随机内存).您可以显式地覆盖它,并使用reinterpret_cast< T>或其他类型的强制转换(如static_cast< T>)将任何指针指定给任何其他指针.和dynamic_cast< T> (后两者通常被推荐,因为它们“更安全”,但每种都有其用途).
因此,在机器级别,内存地址只是一个内存地址,cpu将尽职尽责地执行任何访问或调用.然而它很危险,因为你可以把类型混淆起来并且可能不知道它.编译时检查有助于避免这种情况,但通常没有关于运行时指针本身内存储的实际类型的任何信息.
使用迭代器(由STL提供的指针包装器)的一个优点是许多实现都有许多额外的检查,可以在运行时启用:比如检查你是否正在使用正确的容器,当你比较它们时它们是相同的迭代器的类型,等等.这是使用迭代器而非指针的主要原因 – 但标准并不要求它,因此请检查您的实现.
总结
以上是内存溢出为你收集整理的c – 编译器如何理解指针类型?全部内容,希望文章能够帮你解决c – 编译器如何理解指针类型?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)