| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1450 人关注过本帖
标题:请教有关结构体所占字节数的问题。
取消只看楼主 加入收藏
邹阳
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:124
专家分:402
注 册:2015-10-8
结帖率:73.68%
收藏
已结贴  问题点数:20 回复次数:0 
请教有关结构体所占字节数的问题。
  最近碰到这么一个问题,查询了一下资料,得知:32位和64的环境下数据类型所占字节数不相同,所以这里我们仅讨论64位的情况。
进入正题:

程序代码:
#include<stdio.h>
struct
{
    int a[1];
    float b;
    double c;
}std;
int main()
{
    printf("%d",sizeof(std));
    return 0;
}


编写了一段简单的测试代码,得出结果:
图片附件: 游客没有浏览图片的权限,请 登录注册

为了进一步测试,所以更改结构体std的成员变量数组a[1]为a[2],如下

    int a[2];


得出结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


再次修改,将 int a[2] 改成 int a[3],得出结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


多次修改,将int a[3] 改成 int a[4],得出结果:
图片附件: 游客没有浏览图片的权限,请 登录注册


最后得出测试结果,已知,64位环境下,float 占用4字节,double占用8字节,
所以:
    当int a[1]时,得出结果:4字节+4字节+8字节=16字节
    当int a[2]时,得出结果:4字节*?+4字节+8字节=24字节
    当int a[3]时,得出结果:4字节*?+4字节+8字节=24字节
    当int a[4]时,得出结果:4字节*?+4字节+8字节=32字节
    当int a[5]时,得出结果:4字节*?+4字节+8字节=32字节
    当int a[6]时,得出结果:4字节*?+4字节+8字节=40字节
    当int a[7]时,得出结果:4字节*?+4字节+8字节=40字节

以此类推,从int a[2]开始,每加两个数组下标每增加2(等同于每增加两个数组元素),字节增加8。
疑惑:为什么数组在增加一个数组元素时,就已经多占用了8字节呢,虽然再增加一个数组元素时,所占字节数不变。请问究竟是该如何计算呢?


[此贴子已经被作者于2019-4-11 01:31编辑过]

搜索更多相关主题的帖子: 结构体 字节 int 结果 增加 
2019-04-11 01:27
快速回复:请教有关结构体所占字节数的问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027936 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved