指针和工会中的数组的不同地址

Different addresses of a pointer and an array in a union

本文关键字:数组 地址 指针      更新时间:2023-10-16

我想获取数组的第一个元素的地址。此数组与指针结合。

代码:

#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: %pn", aa);
    printf("Pointer inner: %pn", pa);
    return 0;
}

结果:

array   inner: 0x7ffdad959050
Pointer inner: 0x7ffdad959140

为什么这两个地址有所不同?我希望数组和指针具有相同的地址。

表达式u.pnt的结果不是联合成员u.pnt的地址。这是成员的价值。但是该成员的价值不确定,因此您的程序具有不确定的行为。

要获取地址,您可以使用操作员(就像您接收其他成员的地址时一样):

uint8_t** pa = &u.pnt;