程序:
#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
sizeof(struct node)
与sizeof(head)
不同?
不会将malloc分配8个字节吗? sizeof(head)
以来
与sizeof(int)
相同,那么next
存储在哪里?答案 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)