在C语言中,给返回指针的函数赋值做什么*函数=值

在C语言中,给返回指针的函数赋值做什么*函数=值,c,function,pointers,C,Function,Pointers,所以我在看,这家伙一直在用 uint32_t *internalNodeNumKeys(void *node) { return (uint32_t *)(node + INTERNAL_NODE_NUM_KEYS_OFFSET); } *internalNodeNumKeys(root) = 1; 这有什么用?我记得他在某个地方说过,因为这些函数返回指针,所以它们可以用作setter,但它们设置了什么?函数返回一个指向int的指针,表达式*internalNodeNumKeys(r

所以我在看,这家伙一直在用

uint32_t *internalNodeNumKeys(void *node)
{
    return (uint32_t *)(node + INTERNAL_NODE_NUM_KEYS_OFFSET);
}

*internalNodeNumKeys(root) = 1;

这有什么用?我记得他在某个地方说过,因为这些函数返回指针,所以它们可以用作setter,但它们设置了什么?

函数返回一个指向
int
的指针,表达式
*internalNodeNumKeys(root)=1解析为:

*(internalNodeNumKeys(root)) = 1;
用于函数调用的后缀运算符(如
()
)比用于解引用的前缀运算符(如
*
)绑定得更紧密

还要注意,
InternalNodeEnumKeys
是高度不可移植的:

  • void
    指针上执行指针算术是不可移植的,
    节点
    在添加之前应转换为
    (unsigned char*)
  • 将任意偏移量投射到
    节点
    指向的对象中,作为
    int
    的指针可能具有未定义的行为,此时程序员正在玩火

这不是函数指针;这是一个返回指针的函数。
node+INTERNAL\u node\u NUM\u KEYS\u OFFSET
是。是的,但正如Jamesdlin在对问题的一个注释中所述,
node+INTERNAL\u node\u NUM\u KEYS\u OFFSET
是非法的,因为它使用
void*
执行指针算术。最好将参数声明为
char*