指向链表元素的指针数组

时间:2013-06-25 08:52:08

标签: c visual-studio-2010

我有一个链表(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。

问候。

1 个答案:

答案 0 :(得分:5)

如果你想要一个指针数组,你应该这样做:

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

此代码完全符合您的要求 - 为N Tproduct指针分配内存。


您的代码有什么问题?

  • 您的arrayOfPointers类型是指向Tproduct的指针 - 因此,您可以像 1 一样对象操作 ,但不像指向对象的指针数组

    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_array或类似的内容。 fill并不意味着分配