C++ 为什么变量没有从“按指针传递”更改?

C++ 为什么变量没有从“按指针传递”更改?,c++,C++,为什么n在draw()之后仍然指向默认节点 我试图将指向节点的指针传递到draw(),并使其指向draw()中新创建的节点 #包括 使用名称空间std; 结构节点{ int键; 结构节点*l,*r; 国际水平,地点; }; int键计数器=0; 虚线绘制(结构节点*t,整数低,整数高,整数层){ 如果(楼层==0)返回; t=新节点(); t->key=++keyCounter; t->标高=楼层; int mid=(低+高)/2; t->place=mid; 图纸(t->l、低、中、层-1);

为什么n在
draw()
之后仍然指向默认节点

我试图将指向节点的指针传递到
draw()
,并使其指向
draw()
中新创建的节点

#包括
使用名称空间std;
结构节点{
int键;
结构节点*l,*r;
国际水平,地点;
};
int键计数器=0;
虚线绘制(结构节点*t,整数低,整数高,整数层){
如果(楼层==0)返回;
t=新节点();
t->key=++keyCounter;
t->标高=楼层;
int mid=(低+高)/2;
t->place=mid;
图纸(t->l、低、中、层-1);
图纸(t->r、中、高、1层);
}
无效访问(结构节点*t){
如果(t!=NULL){

在“方法绘制”中,您可以将
t
设置为指向另一个
节点

t = new node();

现在
t
指向另一个内存空间。它不是
n
指向的空间。当您更改
t
属性时,您不会更改
n
指向的
节点。请删除我上面指定的行。

如果确实要更改n指向的内容,请使用指针的引用

void draw(struct node& *t, int low, int high, int storey){

也不要忘记你所通过的自由指针。但是,建议你认真考虑你的设计。

代码是混淆谁分配<代码> n>代码>。你做两次-一次在代码>主()/<代码>和一次在代码>()(代码)>。这显然是不明智的。

因此,一个明显的问题是:既然它对它没有任何作用,为什么要将
n
传递给
draw()

struct node *draw (int low, int high, int storey)
{
    if(storey == 0) return nullptr;
    t = new node();
    ....
    return t;
}
然后:

int main()
{
    struct node *n = draw(0, 64, 6); 
    if (n)
        visit(n);
    return 0;
}

当然,现在是2018年,你不应该真正使用原始指针,但是。有一个叫做
draw
的函数来分配一个对象也有点奇怪。也许它应该叫做
allocate\u和\u draw

为什么n在draw()之后仍然指向一个默认节点?因为您通过值传递
n
。对
draw()中的
t
所做的任何更改
只是对
t
的局部更改。它不会影响
main
n
的值。您将为节点分配两次内存,一次在
main
中,然后在
draw
中,通过值传递n,该值在draw()中变为t。然后您不使用t,而是将其更改为指向一个新节点。不清楚您试图完成什么。您的代码中没有
delete
。没有
new
而没有
delete
int main()
{
    struct node *n = draw(0, 64, 6); 
    if (n)
        visit(n);
    return 0;
}