如何在C ++中声明不同大​​小的数组数组?

时间:2014-09-25 21:50:42

标签: c++ arrays declaration

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

Foo one;
Foo two;
Foo three;

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

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

这适用于Arduino环境,因此newmalloc()和STL无法使用。

1 个答案:

答案 0 :(得分:6)

你是在正确的道路上,但在核心语言层面,你将不得不为每个子阵列创建命名数组对象

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中你有复合文字功能,可以让你完全按照你的版本进行操作

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

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