strange thing happens when I try to get the address of a struct member
本问题已经有最佳答案,请猛点这里访问。
我尝试使用get address运算符"&;"来获取结构类型demo的某些成员变量的地址。
但如果成员类型为char,则会发生奇怪的事情。
我不知道发生了什么。有人能帮我解释为什么吗?这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <iostream> using namespace std; struct demo{ int a; float b; char c; char d; char e; }; int main(){ demo s; s.a = 0; s.b = 0.1; s.c = 'c'; s.d = 'd'; s.e = 'e'; cout <<"address of a:[" <<&s.a <<"]"<< endl; cout <<"address of b:[" <<&s.b <<"]"<< endl; cout <<"address of c:[" <<&s.c <<"]"<< endl; } |
我用g++编译了代码,得到了以下输出:
1 2 3 | address of a:[0x7fff96b9f5c0] address of b:[0x7fff96b9f5c4] address of c:[cde] |
S.A和S.B的地址正确打印。但是为什么S.C的地址是[CDE]?当类型为char时,&s.c似乎返回该内存地址中(可能接近)的一些值。它是否与结构中的内存对齐有关?
这就是关于字符的问题,它试图打印出位于
你仍然可以用
要解决这个问题,您可以将地址
1 | cout <<"address of c:[" << (int*)((int)&s.c) <<"]"<< endl; |
在这里,我们把地址转换成一个整数,然后返回到指针,这样当我们打印它时,它就在漂亮的POTEN-Y十六进制格式中。我编译了新代码并得到了以下结果:
1 2 3 | address of a:[0x28fed4] address of b:[0x28fed8] address of c:[0x28fedc] |