链表中节点的大小

时间:2015-05-27 19:41:12

标签: c++ malloc sizeof

程序:

#include <iostream>
#include <stdlib.h>
using namespace std;
struct node 
{
    int data;
    struct node *next;
};

int main() 
{
    struct node* head = NULL;
    head = (struct node*)malloc(sizeof(struct node)); 
    cout<<sizeof(struct node)<<"\n"<<sizeof(head)<<"\n"<<sizeof(int);
    return 0;
}

输出:

8
4
4
  1. 为什么sizeof(struct node)sizeof(head)不同? 不会将malloc分配8个字节吗?
  2. sizeof(head)以来 与sizeof(int)相同,那么next存储在哪里?

3 个答案:

答案 0 :(得分:4)

head不是节点,它是指向节点的指针。所以sizeof(head)给你一个指针的大小,它与它指向的东西的大小无关。 sizeof(*head)会给你一个节点的大小。

答案 1 :(得分:0)

原因如下

 cout<<sizeof(struct node) // returns the size of struct node 4 bytes for pointer and 4 bytes for int
 sizeof(head) // returns the size of pointer 4 bytes
 sizeof(int); // returns the size of integer 4 bytes

答案 2 :(得分:0)

sizeof评估表达式的类型的大小。在这种情况下,head是一个指针。在32位机器上,指针是4个字节,巧合的是整数也是4个字节。

要在没有实际类型名称的情况下正确获取head的大小,sizeof非常智能,可以在您取消引用对象时弄明白。

// == sizeof(struct node)
sizeof(*head)