基本C指针语法

时间:2016-01-18 18:30:15

标签: c pointers syntax

从我所见,*符号通常出现在基本类型变量之前(例如int)。但是,我遇到了一行代码如下:

insert(int key, struct node **leaf)
{
    if( *leaf == 0 )
        {
        *leaf = (struct node*) malloc( sizeof( struct node ) );
        (*leaf)->key_value = key;
        /* initialize the children to null */
        (*leaf)->left = 0;    
        (*leaf)->right = 0;  
    }
    else if(key < (*leaf)->key_value)
    {
        insert( key, &(*leaf)->left );
    }
    else if(key > (*leaf)->key_value)
    {
        insert( key, &(*leaf)->right );
    }
}

*符号在结构出现之前如何工作(例如 struct node * )?

感谢。

2 个答案:

答案 0 :(得分:1)

leaf作为指针的指针。这意味着它指向内存中的指针。 *运算符取消引用其操作数。所以*leaf表示leaf指向的指针的值。实际上,我可以看到这种结构与树数据结构有关。这段代码实际上为内存({1}}指向的位置分配了内存:

leaf

*leaf = (struct node*) malloc( sizeof( struct node ) ); 是用户定义的类型,struct node表示指向struct nod *类型变量的指针类型。

答案 1 :(得分:1)

*在C中都是二元和一元运算符,它在不同的上下文中表示不同的东西。

根据您提供的代码:

*leaf = (struct node*) malloc( sizeof( struct node ) );

此处void *返回的malloc(无效指针)被转换为指向struct node的指针,我不建议这样做,有关详细信息,请阅读this

我猜你看到叶子的声明会是这样的:

struct node ** leaf; //declares a pointer to a pointer of struct node

leaf = malloc(sizeof(struct node *) ); //allocate enough memory for pointer
//remember to not cast malloc in C

此时*leaf是指向struct node的指针,其中*充当取消引用运算符。