0

リンクされたリスト (Tproduct) があり、これへのポインターの配列を作成したいと考えています。

e1 -> e2 -> e3 -> e4 -> e5 -> e6
|           |                 |
v           v                 v
p[0]       p[1]              p[2]

私の宣言は次のようになります。

Tproduct *arrayOfPointers = (Tproduct*)malloc(N*sizeof(Tproduct*));

これは適切ですか?Tproduct *arrayOfPointers なのか、Tproduct arrayOfPointers なのかわかりません。

よろしく。

4

1 に答える 1

5

ポインターの配列が必要な場合は、次のようにする必要があります。

Tproduct **arrayOfPointers = (Tproduct**)malloc(N*sizeof(Tproduct*));

このコードはまさにあなたが望むことを行います -N Tproductポインタにメモリを割り当てます。


コードの何が問題になっていますか?

  • あなたの型arrayOfPointersはへのポインタTproductです - したがって、オブジェクトの配列のように操作できます、オブジェクトへのポインタの配列のようには操作できません

    1配列ではなくポインタです。だからこそのように

  • オブジェクトの配列が必要な場合は、ポインターNではなくオブジェクトにメモリを割り当てる必要があります。N

    malloc(N * sizeof(Tproduct))
    //                ^^^^^^^^ - Note: not a pointer
    

そして今、この型の配列を返す関数を書きたいと思います。原型は?

Tproduct** fill();

仕事をするべきです。関数の例:

Tproduct** fill()
{
    Tproduct **arrayOfPointers = (Tproduct**)malloc(N*sizeof(Tproduct*));
    // do some stuff
    return arrayOfPointers;
}

ただし、関数の名前を次のように変更することをお勧めしますallocate_arrayfillという意味ではありませ

于 2013-06-25T08:55:00.003 に答える