乘以指针地址

时间:2014-03-17 00:52:59

标签: c pointers

所以基本上bst在这种情况下是一个浮点指针(我将它用于二叉搜索树的数组实现)。我需要插入元素,左节点= 2i,右节点= 2i + 1,所以bst = bst * 2表示我正在尝试更改数组当前索引的指针。它不起作用。我如何使其工作?允许添加指针但不能多次使用。为什么呢?!

有关详细信息,请参阅my whole program

3 个答案:

答案 0 :(得分:4)

不允许对指针进行乘法运算,因为它没有用处。如果你有一个位于地址0x4f2c18e9的变量 - 这是一个指针值 - 没有理由期望地址0x9e5831d20x4f2c18e9 * 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;
}

从您描述的方式来看,这就是您想要的。

无论其!

我认为你的导师不会要你像这样弄乱你的记忆。这不是程序员应该做的任何事情,除非你想让你的计算机变成一个变换器,换成擎天柱,然后把你的热情推到明年。

所以......我建议你回去仔细阅读有关问题的说明。