指针和结构类型的大小看似不一致的原因是什么?
在我的机器上,相关的尺寸是:
sizeof(char) == 1,sizeof(int) == 4和sizeof(char*) == 8。
#include <stdio.h>
#include <stdlib.h>
typedef struct person{
char *name;
int age;
}Person;
int main()
{
printf("sizeof(Person): %dn", sizeof(Person)); //-> 16 bytes
Person *person = (Person*)malloc(sizeof(Person));
printf("sizeof(person): %dn", sizeof(person)); //-> 8 bytes ( Why 8 and not 16? )
char buffer[32];
printf("sizeof(buffer): %dn", sizeof(buffer)); //-> 32 bytes
person -> name = (char*)malloc(sizeof(buffer));
printf("sizeof(person->name): %dn", sizeof(person->name)); //-> 8 bytes ( Why 8 and not 32? )
return 0;
}
我知道这是sizeof(Person) == 16因为填充,但我不明白以下内容。
如果sizeof(Person) == 16,为什么sizeof(person) == 8而不是 16?
如果sizeof(buffer) == 32,为什么sizeof(person->name) == 8而不是 32?
回答
因为, as sizeof(char *),sizeof(person)返回指针的大小。在您的情况下,指向结构的指针(此处指向 Person 结构)的大小为 8。
并sizeof(person->name)返回name定义为 a的 char 上指针的大小char *。
buffer不是指针,它是一个数组。编译器知道它并sizeof(buffer)返回数组的大小,即使数组的名称和指针之间存在一些相似之处,但它们的处理方式并不相同。