黑马程序员技术交流社区

标题: 结构体补齐算法是什么意思 [打印本页]

作者: LuciferTJD    时间: 2015-4-6 14:54
标题: 结构体补齐算法是什么意思
代码中有一个名称为结构体补齐算法
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char c = 'A';
  5.    
  6.     int a = 10;
  7.    
  8.     printf("a=%p\n", &a);
  9.     printf("c=%p\n", &c);
  10.    
  11.    
  12.     /*
  13.     struct Student
  14.     {
  15.         int age;// 4
  16.         int score;// 4
  17.         
  18.         char *name;//8
  19.     };
  20.    
  21.     struct Student stus[3];
  22.    
  23.    
  24.     printf("%ld\n", sizeof(stus));*/
  25.    
  26.     return 0;
  27. }
复制代码


这个代码是要表示什么知识点呢?
作者: wupeng756    时间: 2015-4-6 16:38
结构体里 每个变量的大小都不一样,但是在存储的时候 都是按最大的分配空间,比如上面的例子,一个结构体的大小不是4+4+8=16 而是8+8+8 = 24 不信你写代码测测
作者: 梦想中前行    时间: 2015-4-6 21:21
结构体Student里边三个不同类型的成员,这三个成员的字节数不一样,是4,4,8.但是系统会在输出时,按最大字节的成员的倍数来分配。所以就变成了8,8,8。是系统为了方便计算。
作者: LuciferTJD    时间: 2015-4-6 22:16
wupeng756 发表于 2015-4-6 16:38
结构体里 每个变量的大小都不一样,但是在存储的时候 都是按最大的分配空间,比如上面的例子,一个结构体的 ...

但是输出时stus长度为什么是48呢,如果把[3]去掉,也只是16,只是4+4+8=16,所以不知道怎么回事
作者: longer057    时间: 2015-4-6 23:08
搜迪斯奈,这么高大上,就是字节数码
作者: oucding    时间: 2015-4-7 15:06
这个你可以百度一下,有很多详细说明的




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