A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LuciferTJD 中级黑马   /  2015-4-6 14:54  /  1744 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码中有一个名称为结构体补齐算法
  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. }
复制代码


这个代码是要表示什么知识点呢?

5 个回复

倒序浏览
结构体里 每个变量的大小都不一样,但是在存储的时候 都是按最大的分配空间,比如上面的例子,一个结构体的大小不是4+4+8=16 而是8+8+8 = 24 不信你写代码测测
回复 使用道具 举报
结构体Student里边三个不同类型的成员,这三个成员的字节数不一样,是4,4,8.但是系统会在输出时,按最大字节的成员的倍数来分配。所以就变成了8,8,8。是系统为了方便计算。
回复 使用道具 举报
wupeng756 发表于 2015-4-6 16:38
结构体里 每个变量的大小都不一样,但是在存储的时候 都是按最大的分配空间,比如上面的例子,一个结构体的 ...

但是输出时stus长度为什么是48呢,如果把[3]去掉,也只是16,只是4+4+8=16,所以不知道怎么回事
回复 使用道具 举报
搜迪斯奈,这么高大上,就是字节数码
回复 使用道具 举报
这个你可以百度一下,有很多详细说明的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马