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

标签 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 ?

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/

相关文章:

c++ - OpenCV CV_16F型

c++ - Windows 屏幕上的渲染缓冲区

检查我的矩阵是否是幻方

C: 将 "static const char * const"分配给 "static const char *"

c++ - 它说头文件mmsystem.h有问题,我不能使用PlaySound()

c++ - 将 OpenCV 添加到 iOS 应用程序

c++ - 将 'std::initializer_list<int>' 转换为 'int'

c - 从文件中删除一条记录

algorithm - 合并单链表的两半

c++ - 无法从 'SDL_Surface' 转换为 'SDL_Surface MainMenu::*'