所以基本上bst在这种情况下是一个浮点指针(我将它用于二叉搜索树的数组实现)。我需要插入元素,左节点= 2i,右节点= 2i + 1,所以bst = bst * 2表示我正在尝试更改数组当前索引的指针。它不起作用。我如何使其工作?允许添加指针但不能多次使用。为什么呢?!
有关详细信息,请参阅my whole program。
答案 0 :(得分:4)
不允许对指针进行乘法运算,因为它没有用处。如果你有一个位于地址0x4f2c18e9
的变量 - 这是一个指针值 - 没有理由期望地址0x9e5831d2
(0x4f2c18e9 * 2
}是存储数据的有效位置
答案 1 :(得分:0)
bst + 1
表示"此浮动后的下一个浮点数",编译器知道bst是一个浮点数,因此它知道应该移动多少距离来获取下一个元素。
但是什么是"乘以指针"?它有意义吗?
如果你的意思是距离数组开头两次,那么它就是一个索引概念。作为数组索引,如arr[i * 2 + 1]
,它首先计算i * 2 + 1
,这意味着距离,然后将其应用于[]
运算符。
所以,如果你想做这样的事情,你应该首先计算从这个元素到开头的距离,然后进行乘法运算,然后在最终中加回。示例代码如下:
BStree bst, h;
......
size_t i = bst - h;
BStree pLeftNode = bst + i * 2;
答案 2 :(得分:0)
您正在做的是使用递归将基础保持在堆栈的底部并使用您的BStree推送下一个位置。您只需使用简单的测试传递下一个位置:
void bstree_insert(BStree bst, float key){
long int ibst = (int)bst;
ibst *= 2;
float * nbst = (float *)ibst;
if(*bst == -1)
*bst = key;
else if(*bst == key)
;
else if(*bst > key)
bstree_insert(nbst+1, key);
else if(*bst < key)
bstree_insert(nbst+2, key);
return;
}
从您描述的方式来看,这就是您想要的。
无论其!
我认为你的导师不会要你像这样弄乱你的记忆。这不是程序员应该做的任何事情,除非你想让你的计算机变成一个变换器,换成擎天柱,然后把你的热情推到明年。
所以......我建议你回去仔细阅读有关问题的说明。