在编写C++程序遇到了问题


for (int m = 0; m <= Merge->keynum; m++)
                {
                    q->ptr[loc] = Merge->ptr[m];
                    loc++;
                }

以上代码中q->ptr[loc] = Merge->ptr[m]意思应该是把Merge->ptr[m]赋值给q->ptr[loc],但是调试中发现Merge->ptr[m]被赋值给了q
调试结果如下
q是引用类型,是一个指针的引用,Merge是一个指针变量

img


请问这是为什么呀?如何解决这个bug?

结构定义:

//B树结构定义
typedef int KeyType;    //指定int类型为关键字类型
typedef bool Status;
typedef struct BTNode
{
    //B树结点类型
    int keynum;                        //结点当前关键字个数 
    KeyType key[ORDER + 1];            //结点关键字数组,key[0]未用
    struct BTNode* parent;            //双亲结点指针
    struct BTNode* ptr[ORDER+1];  //孩子结点指针数组,预留一个位置插入使用
}BTNode,*BTree;
typedef struct _result
{
    //B树的查找结果类型
    BTree pt;    //指向找到的结点
    int i;        //关键字在结点的位序
    bool tag;    //结果标志,1为成功,0为失败
}result;

函数原型:

Status Restore(BTree& q)

这里的q和merge是同类型的吧 然后ptr 是这个类型第一个字段? 然后第一个元素的地址和q的地址一致也是可能对的 把类型定义贴出来看看

这不是错吧,只是调试器比较智能,直接提示你指向的内存的第一个元素内容

m等于0的时候吗,q和它的第一个元素的地址应该是一样的

你的for循环进入前,loc变量需要初始化的

有可能是算术符优先级的原因吧,试试这个


(q->ptr[loc]) = (Merge->ptr[m]);

望采纳


for (int m = 0; m <= Merge->keynum; m++)
{
          (q->ptr[loc]) = (Merge->ptr[m]);
          loc++;
}
加括号试试

C语言--指针
https://blog.csdn.net/m0_54524462/article/details/119154854