Untitled

 avatar
unknown
plain_text
2 years ago
1.6 kB
2
Indexable
#include <stdio.h>
#include <stdlib.h>

typedef struct node Node;
struct node
{
    int value;
    struct node *left;
    struct node *right;
};

void initialize_node(Node *p, int value)
{
    p->value = value;
    p->left = NULL; // NULL is the null pointer; signifies pointing to "nothing"
    p->right = NULL;
}

Node *make_node(int value)
{
    Node *ret = malloc(sizeof(Node));
    initialize_node(ret, value);
    return ret;
}

int main()
{
    Node *root = make_node(0xa1a2a3a4);
    Node *a = make_node(0xb1b2b3b4);
    Node b;
    initialize_node(&b, 0xc1c2c3c4);

    root->left = a;
    root->right = &b;

    printf("Address pointed to by root: %p\n", root);
    printf("Address pointed to by a: %p\n", a);
    printf("Address of b: %p\n\n", &b);

    printf("Value of root->value: %x\n", root->value);
    printf("Address pointed to by root->left: %p\n", root->left);
    printf("Address pointed to by root->right: %p\n", root->right);
    printf("Address of root->value: %p\n", &root->value);
    printf("Address of root->left: %p\n", &root->left);
    printf("Address of root->right: %p\n\n", &root->right);

    char *byteptr = (char *)root; // Makes a char * pointing to what root points to;
    // (char *) typecasts the Node * root into a char *

    for (int i = 0; i < sizeof(Node); i++)
    {
        printf("Byte at address %p (byte %d of root): %hhx\n", byteptr + i, i, *(byteptr + i));
    }

    free(root);
    free(a); // Why should free not be called for b?

    return 0;
}
Editor is loading...