为什么struct给出了错误的sizeof和void指针

时间:2014-08-27 03:13:58

标签: c

  1. 为什么sizeof输出错误?
  2. void pointer是什么意思?为什么是4个字节?
  3. 在此代码中:

    struct s1
    {
        int p;
        void *q;
        char r;
    };
    struct s2
    {
        int p;
        char r;
        void *q;
    };
    int main()
    {
        struct s1 s;
        struct s2 r;
        printf("%d %d",sizeof(s),sizeof(r));
        printf("\n");
        printf("%d %d %d",sizeof(int),sizeof(char),sizeof(void*));
        return 0;
    }
    

    我的输出为12,但我认为sizeof应该给出9作为答案。

    我在很多帖子中听到的这个填充是什么?

1 个答案:

答案 0 :(得分:2)

它没有给出错误的输出。你系统中int的大小是4,void指针的大小也是4,而char通常可以是8位长,struct本身不会是9个字节长,因为大多数系统至少是32位,所以编译器是"填充"它们是4个字节的倍数。 void指针只是一个指向任何东西的指针。