c - 带有数组指针的 union 声明?

标签 c

我有以下 union 结构:

typedef union Message
{
  struct
  {
    unsigned short header: 16;
    unsigned short header2: 16;
    unsigned int timestamp: 32;
    unsigned int payload: 32;

  } pieces;
  unsigned short whole[6];
}Message;

如果我这样声明它会起作用

Message msg = {.whole={255,255,255,0,255,0}};

我只是想知道是否有任何解决方案可以通过现有数组声明 union ?像这样:

unsigned short arr[] = {255,255,255,0,255,0};
Message msg = {.whole=arr};

最佳答案

不,那是不可能的。在几乎所有上下文中,使用数组名称都会使其“衰减”为指向第一个元素的指针。

顺便说一句,这与您的数组隐藏在 union 中这一事实无关。数组无法赋值,初始化它们的唯一方法是像您一样使用初始化器。

不过,您可以只使用 memcpy 来复制内容。

关于c - 带有数组指针的 union 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45313966/

相关文章:

c++ - C函数反转char数组字符串

c - openMP 程序中的嵌套 for 循环花费的时间太长

C、Windows API递归导航子目录

c++ - C/C++ 中 Delphi 类型的类比

c - 为什么目标文件的顺序对静态库很重要?

c - Scanf运行时错误,必须ctrl-alt-delete

c - 如何在Gtk中组合accel键?

c - 将字符串值存储在 int 中

使用 Microsoft Visual Studio 在 Windows 64 位上为 PostgreSQL 数据库创建 C 函数 dll

c - 从结构中添加或删除数据