2014-09-25 72 views
1

我基本上想要做这样的事情:如何在C++中声明不同大​​小的数组数组?

Foo one; 
Foo two; 
Foo three; 

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

也就是说,我要声明一个空空的终止阵列终止指针数组到一个特定的类的实例。

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

+0

我知道上面的声明可能是错误的,因为我用英文写了这些,这就是我要求的,正确的声明。 – 2014-09-25 21:51:56

回答

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++作为非标准的扩展。

+0

哦,该死的。这就是我现在得到的,但我试图消除冗余。真的没有更好的方法,呃? – 2014-09-25 22:01:20