C++ 从指针中减去整数的结果是什么?
我在研究数据结构 当我读这段代码时,我不明白C++ 从指针中减去整数的结果是什么?,c++,pointers,C++,Pointers,我在研究数据结构 当我读这段代码时,我不明白 void kth(int k){ Node* x = root; while(1){ while(x->l && x->l->cnt > k) x = x->l; if(x->l) x -= x->l->cnt; // **==> ?????** if(!k--) break; x = x->r;
void kth(int k){
Node* x = root;
while(1){
while(x->l && x->l->cnt > k) x = x->l;
if(x->l) x -= x->l->cnt; // **==> ?????**
if(!k--) break;
x = x->r;
}
splay(x);
}
所有其他行都能理解,但
if(x->l) x -= x->l->cnt; // **==> ?????**
这条线听不懂
x是指向该点地址的指针
但是cnt是一个整数变量
x是由“new”运算符分配的指针
x -= x->l->cnt
这条线是什么意思
这行代码在语法或语义上是否正确?如果
x->l->cnt
是整数,则表示“将指针x
移动到x->l->cnt
当前指向的元素之前”。我无法判断该操作是否有效,因为我不知道x
所指的是什么。旁注:不要成为“那个家伙”,使用描述性变量名。它使读取整个数量级的代码变得更容易。如果它更容易阅读,通常也更容易理解。@user4581301实际上我不得不说这些变量名是可以的。不太好(他们应该真正使用左
、右
和计数
,而不是l
、r
和cnt
),但并不可怕。此外,它们可能是从一本书中逐字复制而来的。像while(1)
和这样的东西!k--
和OP询问的操作的可读性问题比名称更大。要了解更多信息,可以搜索“指针算术”