我有一个奇怪的问题。例如,如果我知道在位置
0x10000005
是我制作的结构。我有一个指向
的指针0x10000000
如果我使用指针操作并使其指向0x10000005,如果我知道那里有什么结构,我可以使用0x10000005处的内容吗?
答案 0 :(得分:0)
如果我使用指针操作
这是一个粗略的陈述。在32位x86系统上,指针将是4个字节。在64位x86系统上,指针将是8个字节。当然,我愿意打赌有一个指针是5个字节的系统,但我愿意把钱放在误解而不是模糊的架构上。
C11标准确实保证了这一点:
§6.7.2.1
15在结构对象中,非位字段成员......具有 地址按声明的顺序增加。一个 指向结构对象的指针,适当转换,指向它 初始成员...结构中可能有未命名的填充 对象,但不是在它的开头。
这意味着获取对象地址的非欺骗方式有效:
struct s* p = &so;