我知道还有其他类似的问题。我已阅读这些内容,但认为这个问题尚未得到解答。
我可以在不咨询的情况下使用指针算术在相同类型结构的连续(在声明序列中连续)字段序列之间移动吗_Alignof
?
我可以在数组元素之间移动而无需咨询,_Alignof
因为包含尾随填充。
但是,结构体中相同类型的连续字段是否可能与数组中的对齐方式不同?
换句话说,这段代码有可能是未定义的行为吗?
struct MyStruct {
long int field_1;
int field_2;
int field_3;
};
int main(void) {
struct MyStruct my_struct;
int *field_2_ptr = &my_struct.field_2;
int field_3_value = *(field_2_ptr + 1);
}
我知道这是不好的做法。我知道->
。_ 我知道填充通常会产生干扰。我想知道填充是否会干扰这种特定情况。
这个问题是关于C的,我不关心C++。
到目前为止,我已经使用 GCC 编译了它,并尝试了 Valgrind 来查看是否有问题,并使用 clang 和 UBSan 编译了它。在这个系统(x86-64 Linux)上似乎没问题。