黑马程序员技术交流社区

标题: 结构体用字符数组时所占的内存 [打印本页]

作者: zsfy    时间: 2014-11-9 23:55
标题: 结构体用字符数组时所占的内存
如下,为什么是20?而不是30呢?

#include <stdio.h>
int main()
{   
        struct student
        {
                int age;
                char name[15];
        };

        struct student stu={20,"qwertyuiop"};
        int s = sizeof(stu);
        printf("%d\n",s);
        return 0;
}
作者: doudou33420    时间: 2014-11-10 00:30
本帖最后由 doudou33420 于 2014-11-10 01:12 编辑

我刚刚是胡扯的
作者: caozhichao    时间: 2014-11-10 01:02
doudou33420 发表于 2014-11-10 00:30
int = 4     char name[15] = 16  (加上\0)

为什么是相加?
作者: doudou33420    时间: 2014-11-10 01:11
本帖最后由 doudou33420 于 2014-11-10 01:13 编辑
caozhichao 发表于 2014-11-10 01:02
为什么是相加?
我刚刚是胡扯的
如果你明白结构体打小是如何计算的话 在看下面的
结构体的总大小为结构体最宽基本类型成员大小的整数背
char name[15] = 15 * 1;
int = 4;  (他是结构体最宽的基本类型)
15+4 = 19   19不是4的整数倍 所以多加1

作者: lanwen963    时间: 2014-11-10 01:17
这回说的对,补齐算法,这里面向int补齐
作者: caozhichao    时间: 2014-11-10 01:21
doudou33420 发表于 2014-11-10 01:11
我刚刚是胡扯的
如果你明白结构体打小是如何计算的话 在看下面的
结构体的总大小为结构体最宽基本类型成员 ...

这么说的话就解释的通了,呵呵
作者: zsfy    时间: 2014-11-10 09:25
doudou33420 发表于 2014-11-10 01:11
我刚刚是胡扯的
如果你明白结构体打小是如何计算的话 在看下面的
结构体的总大小为结构体最宽基本类型成员 ...

嗯,我以为他会把字符数组作为一个整体看。是我理解错了,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2