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

© 陨石 高级黑马   /  2014-9-3 00:13  /  1041 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. struct student
  2. {
  3.         int number;
  4.         char name[10];
  5.         unsigned int  age;

  6. }struct
复制代码
当我改变name的数组成员数量时,name会变更分配的内存大小,为什么?

3 个回复

倒序浏览
  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. }
复制代码
回复 使用道具 举报
当我把number的数据类型,变为更大的double时name的变化又不一样了,为什么?
回复 使用道具 举报
就目前结果来看,以结构内最大的数据类型占用位数为标准,其它数据类型的成员要么彼此加起来的内存空间是最大占用位数,要么像数组这样的整除最大长度,余数补位或和其它小数据类型的成员凑齐那个最大占用位数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马