我无法打印指针的值

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
}