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对象数组一样操作它,但不能像指向对象的指针数组一样操作它。

    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并不意味着分配

于 2013-06-25T08:55:00.003 回答