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();
}
我想为鹅卵石表盘创建 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();
}