我发现结构的第一个元素的地址与结构的地址相同。但是取消引用结构地址不会返回第一个数据成员的值。然而,第一个数据成员的取消引用地址确实返回它的值。例如。结构的地址=100,结构的第一个元素的地址也是 100。现在解除引用应该以相同的方式在两者上工作。
代码:
#include <iostream>
#include <cstring>
struct things{
int good;
int bad;
};
int main()
{
things *ptr = new things;
ptr->bad = 3;
ptr->good = 7;
std::cout << *(&(ptr->good)) <<" " << &(ptr->good) << std::endl;
std::cout << "ptr also print same address = " << ptr << std::endl;
std::cout << "But *ptr does not print 7 and gives compile time error. Why ?" << *ptr << std::endl;
return 0;
}
最佳答案
*ptr
返回给你一个 things
类型的实例, 没有 operator <<
定义,因此编译时错误。
结构与数组不同†。也就是说,它不一定会衰减到指向其第一个元素的指针。事实上,编译器可以自由地(并且经常)insert padding在一个结构中,以便它与某些字节边界对齐‡。所以即使如果一个struct
可能会像数组一样衰减(坏主意),简单地打印它并不能保证打印第一个元素!
† 我的意思是像 int[]
这样的 C 风格数组
‡ 这些边界是依赖于实现的,通常可以通过预处理器语句以某种方式控制,例如 pragma pack
关于c++ - 取消引用结构以获取第一个成员的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41506788/