请思考一下
以下代码输出的 sizeof
分别是多少?
#include <stdio.h>
typedef struct {
char name[100];
unsigned char age;
} student_t, *student_ptr;
int main(int argc, char *argv[])
{
student_t stu = {0};
student_ptr pStu = &stu;
char name[100] = {0};
char *pName = name;
printf("sizeof(stu.name): %ld\n", sizeof(stu.name));
printf("sizeof(pStu->name): %ld\n", sizeof(pStu->name));
printf("sizeof(pStu): %ld\n", sizeof(pStu));
printf("sizeof(name): %ld\n", sizeof(name));
printf("sizeof(pName): %ld\n", sizeof(pName));
return 0;
}
结果如下:
sizeof(stu.name): 100
sizeof(pStu->name): 100
sizeof(pStu): 8
sizeof(name): 100
sizeof(pName): 8
问题
为什么同样是指针 sizeof(pStu->name)=100
,而 sizeof(pName)=8
呢?sizeof(pStu->name)
,首先 pStru
是指向结构体 stu
的指针,如果要计算 sizeof(pStru)
的值,在 64 位机器上,结果应该为 8,而代码中计算的是 sizeof(pStu->name)
,即计算的是成员 name
的 size,因此,sizeof(pStu->name)
的值为 100;而 pName
是指向 name
的指针,因此在 64 位机器上,sizeof(pName)=8
。
总结:sizeof(pStu->name)
求的是成员 name
的 size,而 sizeof(pName)
求的是数组指针的 size,两者完全不同,不可以混淆。