c – 指向struct或class的指针与指向first字段的指针

c – 指向struct或class的指针与指向first字段的指针,第1张

概述我最近尝试通过打印几个指向控制台的指针来调试一个小程序.第一个是结构的内存地址,其他是其字段的内存地址.该代码的精简版本如下: #include <iostream>struct testingPointers{ int i; float f; double d;} test;int main(){ std::cout << &test << '\n' 我最近尝试通过打印几个指向控制台的指针来调试一个小程序.第一个是结构的内存地址,其他是其字段的内存地址.该代码的精简版本如下:
#include <iostream>struct testingPointers{    int i;    float f;    double d;} test;int main(){   std::cout << &test << '\n' << &(test.i) << '\n' <<             &(test.f) << '\n' << &(test.d);}
@H_403_4@输出是:

0x6811100x6811100x6811140x681118
@H_403_4@(显然,不同运行的确切值是不同的,但它们相对于彼此总是具有相同的位置).

@H_403_4@我很困惑,因为第一个指针的值 – 测试的内存位置 – 与第二个指针(第一个测试字段)的值相同.这是否意味着对象没有真正唯一的内存地址,并且指向结构或类的指针只是指向其第一个字段?如果是这样,声明怎么样

a.ba->ba.b()
@H_403_4@如果a实际上只是它的第一个字段,因此没有任何字段或方法?

解决方法 类或结构只描述了应该在内存中保存在一起的字段集合,并且它们之间存在一些语义关系以及对它们进行 *** 作的一些 *** 作.在简单的情况下,内存中类类型对象的内容与构成它的成员(以及一些填充)相比没有更多内容.当你在内存中有一个testingPointers对象时,它实际上只是一个int,一个float和一个double.该类的概念仅用于生成正确的可执行代码 – 它在运行时不存在(至少不是为此目的). @H_403_4@关于对象是否可以共享内存地址的标准的重要部分是§1.8/ 6:

@H_403_4@Unless an object is a bit-fIEld or a base class subobject of zero size,the address of that object is the address of the first byte it occupIEs. Two objects that are not bit-fIElds may have the same address if one is a subobject of the other,or if at least one is a base class subobject of zero size and they are of different types; otherwise,they shall have distinct addresses.

@H_403_4@我们可以从中推断出因为成员test.i是测试的子对象,所以它们可能具有相同的地址.

@H_403_4@一旦你深入了解程序中的所有对象,你真正拥有的是标量值和相邻位域的大集合.这些被称为标准中的存储位置.这些是真正占据空间的东西.其余的对象都是以某种方式组成的.

@H_403_4@A memory location is either an object of scalar type or a maximal sequence of adjacent bit-fIElds all having non-zero wIDth. [ Note: VarIoUs features of the language,such as references and virtual functions,might involve additional memory locations that are not accessible to programs but are managed by the implementation. — end note ]

总结

以上是内存溢出为你收集整理的c – 指向struct或class的指针与指向first字段的指针全部内容,希望文章能够帮你解决c – 指向struct或class的指针与指向first字段的指针所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1237192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存