gpt4 book ai didi

c - 基本 C 指针语法

转载 作者:行者123 更新时间:2023-11-30 21:47:55 25 4
gpt4 key购买 nike

据我所知, * 符号通常出现在基本类型变量(例如 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 );
}
}

当*符号出现在结构体之前时(例如结构节点*),它如何工作?

谢谢。

最佳答案

* 在 C 语言中既是二元运算符又是一元运算符,在不同的上下文中含义不同。

根据您提供的代码:

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

这里,malloc返回的void *(void指针)被转换为指向struct node的指针,我不推荐有关详细信息,请阅读 this

我猜如果你看到 leaf 的声明,它会是这样的:

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的指针,其中*充当解引用运算符。

关于c - 基本 C 指针语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34861626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com