没有指针指针不返回null?

时间:2015-01-09 18:01:58

标签: c arrays pointers struct

我有一个问题。为什么2个指针的输出不同?我没有将指针指派给任何一个,但是一个不返回NULL而一个返回NULL。

typedef struct node
{
    bool word;
    struct node* children[27];
}
node;

int main(void)
{
    node header;
    node* header_2 = malloc(sizeof(node));

    printf("%p %p\n", header.children[1], header_2->children[1]);
}

输出:0xbfba76d4(无)。两者都不应该是NULL吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

考虑以下情况:

int i;
int *j = malloc(sizeof(int));
printf("%d, %d", i, (*j)) ;

(你不能保证i = 0和* j = 0,因为已经为两者分配了一个内存,但它们的值可能是垃圾值,这是该内存位置之前占用的内容)

为了获得定义的值,请始终使用0初始化分配/初始化。

node a;                              // Everything default-initialized

void foo()
{
    static nodeb;                   // Everything default-initialized

    node c;                         // Nothing initialized
    node d = { 0 };                 // Everything default-initialized
    node *p = malloc(sizeof(*p));    // Nothing initialized
    node *q = calloc(1, sizeof(*q)); // Everything zero-initialized
}
  • 默认初始化的所有内容意味着它们使用默认值0进行初始化。
  • 没有任何初始化意味着他们将持久保存可能是垃圾值或零的位置值。

参考链接:C struct with pointers initialization

答案 1 :(得分:0)

这一行:节点标题;

将包含标头变量地址处堆栈上的任何垃圾。

这一行:node * header_2 = malloc(sizeof(node));

将包含对malloc

的调用返回的内容

(如果malloc成功将是指向'heap'中某处的指针,如果malloc失败则为NULL)