从我所见,*符号通常出现在基本类型变量之前(例如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 * )?
感谢。
答案 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
的指针,其中*
充当取消引用运算符。