2015-10-07 74 views
0

我有一个奇怪的问题。例如,如果我知道在位置直接从指针使用结构体

0x10000005 

是我做的一个结构体。我有一个指针指向

0x10000000 

如果我用指针操作,使其改为指向0x10000005,我可以用什么在0x10000005如果我知道是什么结构是吗?

+0

是。是的你可以。您向我们展示该情况的代码,然后我们会告诉您如何执行此操作。 – Beta

+1

大约5小时前,这与你的问题有什么不同:[指针操作内函数?](https://stackoverflow.com/questions/32979898/pointer-manipulation-inside-function) –

+0

这是一个奇怪的(字面上!)地址结构。 – EOF

回答

0

如果我用指针操作

这是一个粗略的说法。在32位x86系统上,指针将是4个字节。在64位x86系统上,指针将为8个字节。当然,我敢打赌,有一个系统的指针是5个字节,但我愿意把我的钱放在一个误解而不是一个晦涩的架构上。

的C11标准并保证这一点:

§6.7.2.1

15内的结构物,非位字段成员...有 地址,在增加的顺序它们被宣布。 A 指向适当转换的结构对象的指针指向其初始成员 初始成员...结构 对象中可能存在未命名的填充,但不在其开头。

这意味着获得一个对象的地址的非挂羊头卖狗肉的方式工作:

struct s* p = &so;