所以我正在看this,而那个家伙一直在使用
uint32_t *internalNodeNumKeys(void *node)
{
return (uint32_t *)(node + INTERNAL_NODE_NUM_KEYS_OFFSET);
}
*internalNodeNumKeys(root) = 1;
这是做什么的?我记得他在某个地方说过,因为这些函数返回指针,它们可以用作设置器,但是它们设置了什么?
答案 0 :(得分:2)
该函数返回指向int
的指针,表达式*internalNodeNumKeys(root) = 1;
解析为:
*(internalNodeNumKeys(root)) = 1;
用于函数调用的后缀运算符(如()
的绑定比用于解引用的前缀运算符(如*
)的绑定更紧密。
还请注意,internalNodeNumKeys
是高度不可移植的:
void
指针上执行指针算术是不可移植的,应在添加之前将node
强制转换为(unsigned char *)
。node
所指向的对象中的任意偏移量作为指向int
的指针可能具有未定义的行为,此时程序员正在玩火。