如果malloc一个struct *它会创建局部变量吗?

时间:2016-07-07 00:18:37

标签: c pointers struct

如果标题没有意义,请随意编辑标题。所以我一直在使用malloc一段时间而没有完全确定它是如何工作的。如果我创建一个int指针并将其设置为等于malloc(10*sizeof(int),我认为它在内存中分配了一个int大小的10倍的块,然后返回此分配的起始地址,但实际上没有任何内容初始化那个记忆呢。我到目前为止好吗?

现在说我为链表节点创建一个结构,如下所示:

typedef struct node_ {
    int data;
    struct node_ *next;
} Node;

然后有一个创建链接列表函数:

Node* LLCreate(int data) {
    Node *head = malloc(sizeof(Node));
    if ( head != NULL) {
        head->next = NULL; // don't get how malloc created `next`
        head->data = data; // or `data`
    }
    return head;
}

如果head只是大小为Node的空块的内存中的起始位置,而不是实际的,那么我无法获得并且似乎无法正确使用谷歌变量,它如何具有nextdata的局部变量?

也许这是一个荒谬的问题,因为我对这里发生的事情有一些根本的误解,但是如果有人理解我想要问的内容并且可以为我清楚这一点,我真的很感激。

1 个答案:

答案 0 :(得分:2)

它没有像nextdata这样的局部变量。

nextdata仅用于计算相对于node指向的地址。

执行node->data后,地址计算为address pointed by node + (total bytes required by any metadata for malloc) + 0,因为datanode结构的第一个成员。

当您执行node->next时,地址计算为address pointed by node + (total bytes required by any metadata for malloc) + sizeof(data),因为nextnode之后的data结构的第二个成员构件。