C:如何用指针数组生成固定数量的对象

C: How to generate a fixed number of objects with an array of pointers

我想为鹅卵石表盘创建 11 个文本层。 如果没有循环,代码看起来像这样。

static TextLayer *time_layer_a;
static TextLayer *time_layer_b; 

...等等。

如何使用循环执行此操作并将指向对象的指针放入类似 list 的结构中?

列表:在这种情况下数组或链将是一个更好的词,因为指针的集合是用于具有固定数量的文本层的显示。并且层数在程序运行期间不会改变。在 C 语言中,列表是一种可以动态调整大小的结构。使用 "list like" 可能会误导有帮助的人认为所寻求的链接方法应该是动态的。这是不正确的。首选使用固定内存分配的结构。

编辑:John3136 建议的数组工作得很好。该数组具有通过减速生成对象指针的额外好处。 John3136 提供了一种让代码自动适应数组大小的方法,这是一个加号。这是一个有用的工具。

这是为我的表盘创建文本层所应用的代码。

声明:

int i;
static TextLayer* layers[11];

加载方式:

// by John3136
// Note the sizeof() stuff means this works unchanged even if you change
// the number of layers.
for(i = 0; i < (short)(sizeof(layers) / sizeof(layers[0])); i++) // (short) converts unsigned interger to +- int
{
  layers[i] = text_layer_create(GRect((bounds.size.w/4)*((i + 1)%4), 
                                      (bounds.size.h/PBL_IF_ROUND_ELSE(5,4))*((i > 2) 
                                                                              ? ((i > 6) 
                                                                                 ? 3 
                                                                                 : 2 ) 
                                                                              : 1), 
                                      (bounds.size.w / 4) ,(bounds.size.h/PBL_IF_ROUND_ELSE(5,4))));
}

卸载方法:

for(i = 0; i < (short)(sizeof(layers) / sizeof(layers[0])); i++) 
{
  text_layer_destroy(layers[i]); 
}

据我们所知,满足您要求的最简单方法:一个包含 11 个指向 TextLayers 的指针的数组。

static TextLayer*  layers[11];

然后您可以填充:

int i;
// Note the sizeof() stuff means this works unchanged even if you change
// the number of layers.
for(i = 0; i < sizeof(layers) / sizeof(layers[0]); i++)
{
    layers[i] = some_func_that_creates_a_layer();
}