指针和结构类型的大小看似不一致的原因是什么?

在我的机器上,相关的尺寸是:
sizeof(char) == 1,sizeof(int) == 4sizeof(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)返回数组的大小,即使数组的名称和指针之间存在一些相似之处,但它们的处理方式并不相同。


以上是指针和结构类型的大小看似不一致的原因是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>