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是一个指针变量
结构定义:
//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