C语言中的字符占空间大小

下面的一个函数,我有点不懂,哪位知道的,告诉下,多谢了若下面的说明和定义,则sizeof(structaa)的值是多少structaa{intr1;doubler2;fl... 下面的一个函数,我有点不懂,哪位知道的,告诉下,多谢了

若下面的说明和定义,则sizeof(struct aa)的值是多少
struct aa
{ int r1;double r2;float r3;
union uu
{
char u1[5]; long u2[2]
}ua
}mya

我弄不明白的是 为什么后面的那个共用体占了八个字节?
补冲下,共用体的特性用法,我明白
只不过是,不明白,共用体里面的两个函数是什么,这里面的两个,我看不懂,
对不起啊,先前表达的有点不清楚
展开
 我来答
星月小木木
推荐于2018-02-13 · TA获得超过3.2万个赞
知道大有可为答主
回答量:2.4万
采纳率:0%
帮助的人:9972万
展开全部
这个要看字符数是什么数据类型,可以用sizeof(类型)操作符来测试字节数。
1、英文字母:如果是char 型,那么是占用1个字节,8位。如果是string型,应该是两个字节,16位,因为末尾还有个\0字符。
比如:
char c = 'a';//它占用一个字符
char c[] = "a";//占用两个。
char c[] = "abcde";//占用4+1 = 5 个,结尾有一个'\0'

2、数字:有很多种类,从小到大分别为:
short、int、float、long、double
字节为:1个、2个、4个、8个、8个
位数为:8位、16位、32位、64位、64位

3、汉字:理论上说,一个汉字占用两个字节,16位。比如:中国,就占用4个字节,例如:
char c[] = "中国";//占用4+1 = 5个字符
michaelfai
推荐于2017-10-03 · 超过39用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:119万
展开全部
union所有的成员分享同一内存
char u1[5]的内存小于long u2[2]的内存,
所以ua占用的内存为long u2[2]的大小

两个函数?可能是你没有弄明白整个结构体的结构
可以这样理解:
union uu
{ //定义共用体
char u1[5]; long u2[2]
}

struct aa
{ //结构体共有四个成员
int r1;
double r2;
float r3;
uu ua;//着个成员的类型是公用体uu型 ua占用八个字节
}

aa mya;//定义结构体aa的一个变量mya
//以上和你的等价
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
躲在天上哭
2007-03-23
知道答主
回答量:16
采纳率:0%
帮助的人:0
展开全部
22
以struct定义的是结构体,结构体变量所占用的内存长度是成员的内存长度之和.每个成员分别占有其自己的内存单元.
以union定义的是共用体变量,共用体变量所占的内存长度等于最和的成员的长度.
因为union是包含在struct里的,所以他是struct的一部分,所以些题共占22个空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zanasky
2007-03-21 · TA获得超过254个赞
知道答主
回答量:215
采纳率:0%
帮助的人:226万
展开全部
共用体与结构体不同,它的成员共同占有一块内存区域
共用体的大小取决于它最大成员的大小
u1[5]是5字节 u2[2]是8字节
所以共用体占8字节

哪两个? struct? union? sizeof?
你是说后面跟着的ua和mya?
定义一个共用体变量ua和结构体变量mya
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangyidan93
2018-07-05
知道答主
回答量:5
采纳率:0%
帮助的人:4183
引用星月小木木的回答:
这个要看字符数是什么数据类型,可以用sizeof(类型)操作符来测试字节数。
1、英文字母:如果是char 型,那么是占用1个字节,8位。如果是string型,应该是两个字节,16位,因为末尾还有个\0字符。
比如:
char c = 'a';//它占用一个字符
char c[] = "a";//占用两个。
char c[] = "abcde";//占用4+1 = 5 个,结尾有一个'\0'

2、数字:有很多种类,从小到大分别为:
short、int、float、long、double
字节为:1个、2个、4个、8个、8个
位数为:8位、16位、32位、64位、64位

3、汉字:理论上说,一个汉字占用两个字节,16位。比如:中国,就占用4个字节,例如:
char c[] = "中国";//占用4+1 = 5个字符
展开全部
char c[] = "abcde";//占用5+1 =6 个,结尾有一个'\0'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式