2016-08-04 5 views
0

小石の時計の面に11のテキストレイヤーを作成したいと思います。 ループがなければ、コードは次のようになります。C:ポインターの配列で固定数のオブジェクトを生成する方法

static TextLayer *time_layer_a; 
static TextLayer *time_layer_b; 

...など。

ループでこれを実行し、リストのオブジェクトへのポインタを配置する方法のような構造ですか?

リスト:ポインターのコレクションが固定数のテキストレイヤーを持つディスプレイ用であるため、この場合、配列またはチェーンがより良い単語になります。また、プログラムの期間中はレイヤの数は変更されません。 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]); 
} 
+0

。明らかにいくつかのコードがありますので、[mcve]を入力してください。また[尋ね]を学び、必要な情報を提供してください。 – Olaf

+0

この質問を完全でコンパイル可能な例にすることは、不必要な混乱を追加するだけです。私はこの質問はそれだけでいいと思う。 – hugomg

+0

@Olaf、私はCで私の最初のプログラムを書いています。私はまだC言語の構造体やそれに最も適したものをすべて知っていません。私は "リストのようなもの"を探していることを知っていました。私ができる最高の時に。配列がうまくいくことがわかっていれば、配列を要求していたでしょう。 – kjl

答えて

3

最も簡単な方法: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(); 
} 
+0

これはリストではなく、リストのようなものではありません。 OPが本当に望んでいることは明確ではない。 MCVEがありません。 – Olaf

+1

@Olaf私はOPが何を望んでいるのかわからないというあなたの意見に同意します(私の最初の文章)。それを言ったのです:どのようにリストのようなものではない一連のアイテムがありますか?私はそれが合理的なチャンスだと思う配列は、私は答えではなく、コメントとして投稿した理由は適切なソリューションです。 – John3136

+0

リストを構成するのに十分な資料があります(バリエーションはありますが、何らかのリンクが共通しています)。 OPがリストを要求する特別な理由があるかもしれません。おそらく彼はそれを動的に変更したいからです。私は彼が本当に必要なものを実際に知っていないと思うが。詳しい情報がなければ、われわれが得たものと協力しなければならない。それだけでは不十分であれば、どんな答えも推測であり、OPにはあまり役立ちませんし、今後の読者には誤解を招く可能性があります。 「不明確な」閉投票の理由がある。 – Olaf

関連する問題