我想获取数组第一个元素的地址。该数组与指针位于一个 union 体中。
代码:
#include <stdio.h>
#include <assert.h>
#include <stdint.h>
union l_array_0_uint8_t {
uint8_t *pnt;
uint8_t array[8];
};
int main()
{
union l_array_0_uint8_t u;
uint8_t* aa = &(u.array[0]);
uint8_t* pa = u.pnt;
printf("array inner: %p\n", aa);
printf("Pointer inner: %p\n", pa);
return 0;
}
结果:
array inner: 0x7ffdad959050
Pointer inner: 0x7ffdad959140
为什么这两个地址不同?我希望数组和指针具有相同的地址。
最佳答案
表达式u.pnt
的结果不是 union 成员u.pnt
的地址。这就是成员(member)的值(value)。但该成员具有不确定的值,因此您的程序具有未定义的行为。
要获取地址,您可以使用address-of运算符(就像您获取其他成员的地址时一样):
uint8_t** pa = &u.pnt;
关于c++ - union 体中指针和数组的不同地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55251769/