为什么sizeof(*node)给出结构的大小而不是指针的大小

vik*_*asm 3 c c++ pointers sizeof

在以下代码中:

typedef struct{int data1; int data2} node;
node n1;
node* n2;

sizeof(n1) returns 8 // size of the struct node
sizeof(n2) returns 4 // since n2 is a pointer it returns the size of the pointer
sizeof(*n2) returns 8 // HOW DOES THIS WORK ?
Run Code Online (Sandbox Code Playgroud)

sizeof实际上如何工作?在上面的例子中,*n2归结为提供n2指向的地址.在这种情况下,n2仍然是一个悬空指针,因为我们既没有分配内存,也没有将它指向某个有效地址.它如何正确地给出结构的大小?

Yu *_*Hao 13

你需要了解两件事:

首先,是什么类型的*n2?类型n2是指针node,所以类型*n2node.

第二,你是对的n2是一个悬空指针,它并没有指向一个有效的地方,但神奇的sizeof是,它是一个编译时运算符(当操作数是一个C99可变长度数组时),sizeof(*n2)被评估为相同的sizeof(node)在编译时.