黑马程序员技术交流社区

标题: 关于结构内成员内存分配 [打印本页]

作者: 陨石    时间: 2014-9-3 00:13
标题: 关于结构内成员内存分配
  1. struct student
  2. {
  3.         int number;
  4.         char name[10];
  5.         unsigned int  age;

  6. }struct
复制代码
当我改变name的数组成员数量时,name会变更分配的内存大小,为什么?
作者: 陨石    时间: 2014-9-3 00:15
  1. int main()
  2. {

  3.         struct student *p;
  4.         p = &stu1;
  5.         //*((unsigned int*) ( (char*)p+16) )
  6.         printf("number=%d\nname=%d\nage=%d\n",sizeof(int),sizeof(char [10]),sizeof(unsigned int));
  7.         //(char*)或是(int*)或是(unsigned int *)是强制类型转换
  8.         printf("number=%d\nname=%s\nage=%d\n", *((int*)p), ((char*)p + 4), *((int *)p+4));
  9.         printf("number=%d\nname=%s\nage=%d\n", (*p).number,(*p).name,(*p).age);
  10.         printf("%x\n %x\n %x\n", p, p->name, &(p->age));
  11.         getchar();
  12.         return 0;
  13. }
复制代码

作者: 陨石    时间: 2014-9-3 00:17
当我把number的数据类型,变为更大的double时name的变化又不一样了,为什么?
作者: 陨石    时间: 2014-9-3 00:22
就目前结果来看,以结构内最大的数据类型占用位数为标准,其它数据类型的成员要么彼此加起来的内存空间是最大占用位数,要么像数组这样的整除最大长度,余数补位或和其它小数据类型的成员凑齐那个最大占用位数。




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