指向链表元素的指针数组

tom*_*ies 0 c visual-studio-2010

我有一个链表(Tproduct),我想创建一个指向这个的指针数组,例如:

e1 -> e2 -> e3 -> e4 -> e5 -> e6
|           |                 |
v           v                 v
p[0]       p[1]              p[2]
Run Code Online (Sandbox Code Playgroud)

我的声明如下:

Tproduct *arrayOfPointers = (Tproduct*)malloc(N*sizeof(Tproduct*));
Run Code Online (Sandbox Code Playgroud)

这是对的吗?我不确定它是Tproduct*arrayOfPointers还是Tproduct arrayOfPointers.

问候.

awe*_*oon 5

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

Tproduct **arrayOfPointers = (Tproduct**)malloc(N*sizeof(Tproduct*));
Run Code Online (Sandbox Code Playgroud)

这段代码正是你想要的 - 为N Tproduct指针分配内存.


您的代码有什么问题?

  • 你的类型arrayOfPointers是一个指向Tproduct-所以,你可以操纵它1对象的数组,而不是像指针指向对象的数组.

    1它仍然是指针,而不是数组.这就是为什么喜欢.

  • 如果你想要一个对象数组,你应该为N对象而不是N指针分配内存:

    malloc(N * sizeof(Tproduct))
    //                ^^^^^^^^ - Note: not a pointer
    
    Run Code Online (Sandbox Code Playgroud)

现在我想写一个函数返回这种类型的数组.什么是原型?

Tproduct** fill();
Run Code Online (Sandbox Code Playgroud)

应该做的工作.功能示例:

Tproduct** fill()
{
    Tproduct **arrayOfPointers = (Tproduct**)malloc(N*sizeof(Tproduct*));
    // do some stuff
    return arrayOfPointers;
}
Run Code Online (Sandbox Code Playgroud)

但我建议将你的功能重命名为,比方说allocate_array或类似的东西.fill并不意味着分配.