C++ 为什么在C++;?(像堆叠一样处理它们)
我有以下代码:C++ 为什么在C++;?(像堆叠一样处理它们),c++,C++,我有以下代码: #include<iostream> #include<stdlib.h> using namespace std; struct Nodo{ int valor; Nodo *siguiente; }; // Lista enlazada "simple", manipulandola con el metodo LIFO (pila). void agregar_nodo(Nodo *&cima, in
#include<iostream>
#include<stdlib.h>
using namespace std;
struct Nodo{
int valor;
Nodo *siguiente;
};
// Lista enlazada "simple", manipulandola con el metodo LIFO (pila).
void agregar_nodo(Nodo *&cima, int n); // ¿Puntero por referencia?
int main(){
Nodo *cima = NULL;
agregar_nodo(cima, 2);
agregar_nodo(cima, 4);
return 0;
}
void agregar_nodo(Nodo *&cima, int n){
Nodo *nuevo_nodo = new Nodo(); // (struct Nodo) | Nodo() Se puede usar cualquier sintaxis
nuevo_nodo->valor = n;
nuevo_nodo->siguiente = cima;
cima = nuevo_nodo;
}
#包括
#包括
使用名称空间std;
结构节点{
英勇;
Nodo*siguiente;
};
//“简单”的清单,马尼普兰多拉·康埃尔·梅托多·利福(pila)。
void agregar_nodo(nodo*&cima,int n);//你是指什么?
int main(){
Nodo*cima=NULL;
agregar_nodo(cima,2);
agregar_nodo(cima,4);
返回0;
}
void agregar_nodo(nodo*&西马,国际北){
Nodo*nuevo_Nodo=new Nodo();/(struct Nodo)| Nodo()是一个非常有用的函数
新野->勇气=n;
新奥尔良->新奥尔良=cima;
cima=新诺多;
}
经过数小时的研究,我终于理解了代码的逻辑(它不是我的,它来自我所学的课程)。然而,在上述调查期间,我无法澄清三个疑问,即:
new
,那么您的Nodo
对象将位于何处?他们必须是堆栈上的本地人或全局人。如果它们是局部变量,那么一旦声明它们的函数退出,它们就会消失。如果它们是全局的,那么无论您声明了多少,您只能使用一定数量的它们。如果每次有人调用agregar_nodo
时都要扩展链接列表,那么每次都必须在堆上使用new
分配一个新的nodo
delete
agregar_nodo
必须更新它,因此它作为指针的引用传入。有时程序会使用指向指针的指针(因此它可能是Nodo**cima
)
void agregar_nodo(Nodo *cima, int n)
但是,当您运行它时,最后一行
cima=nuevo_nodo
将更新局部变量cima
,而不是main
函数中的变量。因此,在第一次调用该函数之后,main
中的cima
仍然是NULL
。因此,函数通过引用接受它,这样函数就可以在main
1中更新cima
。如果不动态分配此节点,而是自动分配它,那么当函数退出时,节点会发生什么情况?。如果静态分配节点以避开自动分配节点时出现的问题,那么可以有多少节点?2。考虑何时要删除节点。如果在添加节点之后但在删除节点之前删除了节点,会发生什么情况?通过引用传递列表的根(或,在葡萄牙语中,顶部)的原因是,它在调用方也会发生变化(main的cima
指向“agregar\u nodo”返回后的新节点)。在C语言中,传递指针的地址。这个有点奇怪。但请记住,指针只是另一个变量,但它恰好包含另一个对象的位置。如果按值传递变量,则得到一个副本。如果按值传递指针,仍然会得到指针的副本。如果更改了复制在函数中的位置,则原始副本将无法知道。@Retr0 Yes。在C中,指针到指针将是通过引用传递指针的最直接、最合理的方式。