C++ 为什么变量没有从“按指针传递”更改?
为什么n在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);
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;
}