指向联合成员的指针

Mal*_*vel 6 c pointers member unions

我有一个结构:

struct TypeValue{
 u8 type;
 union{
   u8 u8value;
   s8 s8value;
 }value;
}
Run Code Online (Sandbox Code Playgroud)

根据类型 var 我们可以有值 fromu8values8value。现在我有一个结构TypeValue,我想获得指向value元素的空指针(不关心指针类型),哪个是正确的:

void *ptr = &typevalue.value (1)
OR
void *ptr = &typevalue.value.u8value (2)
Run Code Online (Sandbox Code Playgroud)

(将其放入 for 循环中以根据类型找到正确的值)

当然 (2) 是一种正确的方法,但我必须遍历数据类型才能获得指向正确值的正确指针。但问题是(1)是否正确,因为我想知道指向联合的指针是否等于指向其元素的指针?大/小端会影响结果吗?

use*_*733 5

void *ptr = &typevalue.value 会做,因为 C 标准(N1570,6.7.2.1 结构和联合说明符)说:

16 工会的规模足以容纳其最大的成员。最多一个成员的值可以随时存储在联合对象中。一个指向联合对象的指针,经过适当的转换,指向它的每个成员(或者如果一个成员是位域,则指向它所在的单元),反之亦然。

地址仅在当前运行环境中有意义(您不将地址存储到闪存),因此地址的字节序无关紧要。