2016-04-14 56 views
-2

所以我在看这段代码:C中结构体大小的解释?

#include <stdio.h> 

struct Student { 
    int id; 
    char name[32]; 
} s, *sp; 

int main() { 
    printf("sizeof(structStudent) = %u\n", sizeof(structStudent)); 
    printf("sizeof(s) = %u\n", sizeof(s)); 
    printf("sizeof(structStudent*) = %u\n", sizeof(structStudent*)); 
    printf("sizeof(sp) = %u\n", sizeof(sp)); 
    return 0; 
} 

输出如下:

sizeof(struct Student) = 36 
sizeof(s) = 36 
sizeof(struct Student*) = 4 
sizeof(sp) = 4 

为什么是struct Student* 4的大小,以及为什么是sp也是4的大小?我的powerpoint没有详细说明这一点。我知道为什么struct Students的大小为36:因为32 char字节+ 4字节(对于一个int)= 36总数。

+0

这甚至没有编译。 – EOF

+1

大小为4的指针是32位系统上的指针。 –

+1

'sp'有'struct student *'类型,所以这两个东西报告相同的大小 –

回答

4

在你的平台上,简单的指针占用32位。这基本上是32位平台的定义。

白宫的地址不必比我的地址长,因为白宫比我的房子大。

5

struct Student *指针并且它几乎不包含任何数据,它只是一个指针。但指针存储在某处并占用一些空间,在您的情况下为4个字节。

struct Student然而,它是一个功能齐全的结构,占用了您计算的太多空间(数组和id占用它们的空间)。