c++ - union 体中指针和数组的不同地址

标签 c++ c arrays pointers unions

我想获取数组第一个元素的地址。该数组与指针位于一个 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/

相关文章:

c++ - LLVM中直接跳转的分支指令

c - 我的 C 程序未提供预期输出

javascript - 如何从对象数组中删除属性

java - 获取循环以添加数组的所有列

c++ - std::map、std::equal_range 和比较函数

c++ - C/C++ 不透明指针库

c++ - 使用 "yes","no","i","out"作为变量/枚举的名称是否安全?

java - 计算缓存为缓存存储元数据所需的内存?

c - C 语言的文件处理计算

javascript - 将从 <span> 元素获取值并对唯一值进行排序的代码