在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*
。