我们应该何时使用“单指针”以及何时使用“指向指针”指向数据结构的混淆

时间:2013-09-11 04:17:32

标签: c list pointers data-structures

我一直关注的用于学习数据结构的书使用“单指针”作为函数中的参数,这些函数在链表中的不同位置添加新节点,例如在开始时,在结束时。同样在删除的情况下使用“指向指针”。在所有这些情况下,函数原型看起来像:

void appendordelete (struct node **, int );

但是在没有计算节点的函数中,显示列表并在某个位置后添加,函数原型变为:

void anyofthementionedfunctions (struct node *, int );

所以当我在链表操作中使用单指针和指针指针时,我很困惑。请澄清。这些函数以典型和理想的方式工作,因此我不会发布这些冗长函数的编码。

1 个答案:

答案 0 :(得分:2)

在这种情况下,使用指向指针的指针,以便可以将指针更改为第一个节点。你保留一个指向列表开头的指针。如果添加新项目,则可能需要更改该指针,因为新项目可能会添加到列表的开头。

void insertAtBeginning(struct node **first_ptr,int value)
{
    struct node *first = malloc(sizeof(struct node));
    first->value = value;
    first->next = *first_ptr;
    *first_ptr = first;
}

void test()
{
    struct node *first = 0;
    insertAtBeginning(&first,5);
    freeAll(first);
}

如果您正在搜索列表,则无需更改指向第一个节点的指针,因此无需将指针传递给指针。

但请注意,指针指针还有其他用途。例如,您可以将矩阵维护为指向行指针数组的指针。