sizeof结构体数组指针和sizeof数组指针的区别

发布时间 2023-11-06 23:55:33作者: JobYan

请思考一下

以下代码输出的 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,两者完全不同,不可以混淆。