C++ 链表递归与数组
这是一个打印滑动列表反转的函数。我正在数组中保存反转的值。但当我离开递归函数的作用域C++ 链表递归与数组,c++,C++,这是一个打印滑动列表反转的函数。我正在数组中保存反转的值。但当我离开递归函数的作用域if时,数组值就变成了垃圾。但是当我在中打印它们的时候,如果那么这些就可以了。告诉我这是为什么??谢谢 void send_reverse(struct node* right,struct node* send){ int arr[size],i=0; if(right!=NULL){ send_reverse(right->link,send);
if
时,数组值就变成了垃圾。但是当我在中打印它们的时候,如果那么这些就可以了。告诉我这是为什么??谢谢
void send_reverse(struct node* right,struct node* send){
int arr[size],i=0;
if(right!=NULL){
send_reverse(right->link,send);
cout<<"("<<right->num<<") ";
arr[i]=right->num;
cout<<arr[i];
i++;
}
cout<<"YES \n";
for(i=0;i<size;i++);
cout<<"-"<<arr[i];
}//endf_
void send\u reverse(结构节点*右侧,结构节点*发送){
int arr[size],i=0;
if(右!=NULL){
发送\反向(右->链接,发送);
cout您的数组是在函数范围内定义的,并且在离开它之前是有效的。尝试在外部使用它是未定义的行为。即使使用递归-每个函数都有一个本地版本的arr
(存储在堆栈上的不同位置),任何级别都不能访问另一个
顺便说一句,请注意for循环没有做任何事情(该行有一个;
。在递归的每一步都初始化并分配arr
数组。不过,在函数内部,只有元素0
被初始化,因此导致将数组的其余部分打印到UB(未定义的行为)。每次执行此行时:
int arr[size],i=0;
您创建了一个名为“arr”的新数组。您将值复制到这个新数组中,而不是原始数组,这就是为什么它在if语句中工作,但在到达显示整个列表的函数底部的代码时开始失败的原因
解决方案是将“arr”传递到函数中,这样函数的每个递归操作都在同一个数组上,而不是创建一个新数组