为何C语言中部分函数声明的名称前带有*?以addentry函数为例
函数名称前的
*含义解释 在代码 struct entry *addentry (struct entry *listPtr, int value){ } 中,函数名addentry前的*表示该函数的返回值是一个指向struct entry类型结构体的指针。
具体说明:
- 若去掉这个
*,函数返回的是struct entry结构体本身,会返回整个结构体的副本; - 加上
*后,函数返回的是该结构体在内存中的地址(指针)。这种写法在链表、树这类需要操作内存地址的数据结构中极为常见——比如你代码里的参数listPtr就是链表头指针,返回新节点或更新后的链表头指针,能更高效地操作数据,避免拷贝整个结构体带来的内存开销。
注意区分函数指针写法:如果是struct entry (*addentry)(...)这种带括号的形式,才表示addentry是一个指向函数的指针。你的代码里因为函数调用()优先级高于*,所以会先解析addentry(...)是函数,再确定它的返回值为结构体指针。
内容的提问来源于stack exchange,提问作者Adeeb Shaik
相关产品推荐
相关产品推荐

