在下面的代码中:
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 ?
sizeof 是如何工作的?在上面的例子中,*n2 归结为提供 n2 指向的地址。 n2 在这种情况下仍然是一个悬空指针,因为我们既没有分配内存也没有将它指向某个有效地址。它如何正确给出结构的大小?
最佳答案
你需要明白两件事:
首先,*n2
的类型是什么? n2
的类型是指向node
的指针,所以*n2
的类型是node
。
其次,你是对的 n2
是一个悬空指针,它没有指向一个有效的地方,但是 sizeof
的神奇之处在于,它是一个 编译时运算符(除非操作数是 C99 可变长度数组),sizeof(*n2)
的计算结果与 sizeof(node)
相同编译时间。
关于c++ - 为什么 sizeof(*node) 给出结构的大小而不是指针的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25808236/