我无法打印指针的值
I cannot print the value of the pointer
我正在研究下面的小程序,以便更好地理解二叉树。我只是想确保指针 *padre
被正确分配,但是没有任何内容打印到控制台,我认为这与我不了解指针的工作方式有关。请帮忙
#include <stdio.h>
#include<iostream>
using namespace std;
class Nodo {
public:
Nodo(int valor) {
dato = valor;
izquierdo = 0;
derecho = 0;
}
int dato;
Nodo* izquierdo;
Nodo* derecho;
};
void Agregar(Nodo** padre, Nodo* hijo) {
if ( !*padre ) {
*padre = hijo;
printf("valor: %i", &(*padre)->dato);
return;
}
}
int main() {
Nodo* padre = new Nodo(5);
Agregar(NULL, padre);
}
您正在通过访问 nullptr 调用未定义的行为:您将 NULL
作为第一个参数传递给 Agregar
。修复您的代码以获得节点值的预期打印输出,如下所示:
#include <cstdio>
class Nodo {
public:
Nodo(int valor) {
dato = valor;
izquierdo = 0;
derecho = 0;
}
int dato;
Nodo* izquierdo;
Nodo* derecho;
};
void Agregar(Nodo** padre, Nodo* hijo) {
if ( !*padre ) {
*padre = hijo;
printf("valor: %i", (*padre)->dato); // pass dato by value not by address
return;
}
}
int main() {
Nodo* padre = new Nodo(5);
Nodo* temp = nullptr;
Agregar(&temp, padre); // first argument must not be nullptr
}
我正在研究下面的小程序,以便更好地理解二叉树。我只是想确保指针 *padre
被正确分配,但是没有任何内容打印到控制台,我认为这与我不了解指针的工作方式有关。请帮忙
#include <stdio.h>
#include<iostream>
using namespace std;
class Nodo {
public:
Nodo(int valor) {
dato = valor;
izquierdo = 0;
derecho = 0;
}
int dato;
Nodo* izquierdo;
Nodo* derecho;
};
void Agregar(Nodo** padre, Nodo* hijo) {
if ( !*padre ) {
*padre = hijo;
printf("valor: %i", &(*padre)->dato);
return;
}
}
int main() {
Nodo* padre = new Nodo(5);
Agregar(NULL, padre);
}
您正在通过访问 nullptr 调用未定义的行为:您将 NULL
作为第一个参数传递给 Agregar
。修复您的代码以获得节点值的预期打印输出,如下所示:
#include <cstdio>
class Nodo {
public:
Nodo(int valor) {
dato = valor;
izquierdo = 0;
derecho = 0;
}
int dato;
Nodo* izquierdo;
Nodo* derecho;
};
void Agregar(Nodo** padre, Nodo* hijo) {
if ( !*padre ) {
*padre = hijo;
printf("valor: %i", (*padre)->dato); // pass dato by value not by address
return;
}
}
int main() {
Nodo* padre = new Nodo(5);
Nodo* temp = nullptr;
Agregar(&temp, padre); // first argument must not be nullptr
}