C++可以使用.获取union、struct中的成员变量的地址
示例代码如下所示
#include <stdio.h>
#include <stdint.h>
struct u128 { uint64_t v64; uint64_t v0; };
int main() {
union { unsigned __int128 ui; struct u128 s; } union_temp_m128;
void* p1 = &union_temp_m128;
void* p2 = &(union_temp_m128.ui);
void* p3 = &(union_temp_m128.ui);
void* p4 = &(union_temp_m128.s.v64);
void* p5 = &(union_temp_m128.s.v0);
printf("p1: %p\n", &union_temp_m128);
printf("p2: %p\n", &(union_temp_m128.ui));
printf("p3: %p\n", &(union_temp_m128.s));
printf("p4: %p\n", &(union_temp_m128.s.v64));
printf("p5: %p\n", &(union_temp_m128.s.v0));
if(p1==p2) {
printf("p1==p2\n");
}
else {
printf("p1!=p2\n");
}
if(p1==p3) {
printf("p1==p3\n");
}
else {
printf("p1!=p3\n");
}
if(p1==p4) {
printf("p1==p4\n");
}
else {
printf("p1!=p4\n");
}
if(p1==p5) {
printf("p1==p5\n");
}
else {
printf("p1!=p5\n");
}
return 0;
}
运行结果如下所示
p1: 0x7ffeb8fe8380
p2: 0x7ffeb8fe8380
p3: 0x7ffeb8fe8380
p4: 0x7ffeb8fe8380
p5: 0x7ffeb8fe8388
p1==p2
p1==p3
p1==p4
p1!=p5