【问题标题】:How do I declare an array of arrays of different sizes in C++?如何在 C++ 中声明一个不同大小的数组?
【发布时间】:2014-09-25 21:50:41
【问题描述】:

我基本上想做这样的事情:

Foo one;
Foo two;
Foo three;

Foo **arr[] = {
    {&one, &two, NULL},
    {&one, NULL},
    {&one, &two, &three, NULL},
    NULL
};

也就是说,我想声明一个空终止数组,该数组由指向特定类实例的指针的空终止数组组成。

这是针对 Arduino 环境的,所以newmalloc() 和 STL 不可用。

【问题讨论】:

  • 我知道上面的声明对于我用英文写的内容可能是错误的,这就是我所要求的,正确的声明。

标签: c++ arrays declaration


【解决方案1】:

您走在正确的道路上,但在核心语言级别,您必须为每个子数组创建命名数组对象

Foo one;
Foo two;
Foo three;

Foo *row0[] = { &one, &two, NULL };
Foo *row1[] = { &one, NULL };
Foo *row2[] = { &one, &two, &three, NULL };

Foo **arr[] = { row0, row1, row2, NULL };

(根据需要添加 const 限定符)。

在 C 语言中,您将拥有 compound literal 功能,可以让您完全按照您的版本所做的操作

Foo **arr[] = 
{ 
  (Foo *[]) { &one, &two, NULL },
  (Foo *[]) { &one, NULL },
  (Foo *[]) { &one, &two, &three, NULL },
  NULL 
};

但它是 C 特有的功能,在 C++ 中不存在。您可能想检查您的编译器是否在 C++ 中支持它作为非标准扩展。

【讨论】:

  • 哦该死的。这就是我现在所拥有的,但我试图消除冗余。真的没有更好的办法了,嗯?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多