鱼C论坛

 找回密码
 立即注册
查看: 965|回复: 4

[已解决]共用体

[复制链接]
发表于 2020-3-21 23:06:07 | 显示全部楼层 |阅读模式
5鱼币
题目一:若有以下定义和语句:
  1. union data
  2. {
  3.         int i;
  4.         char c;
  5.         float f;
  6. }a;
  7. int n;
复制代码

则以下语句正确的是_____
A a=5; B a={2,'a',1.2}   C printf("%d\n",a); D n=a;


题目二:设有以下说明,则下面不正确的叙述是____
  1. union data
  2. {
  3.         int i;
  4.         char c;
  5.         float f;
  6. }un;
复制代码

A un所占的内存长度等于成员f的长度
B un的地址和它的各成员地址都是同一地址
C un可以作为函数参数
D 不能对un赋值,但可以在定义对un时对它初始化

对共用体不熟,感觉题目一都是错的,题目二C D也是错的,麻烦会的给出详细点的解释
最佳答案
2020-3-21 23:06:08
第一题:C,第二题:D
联合体公用同一空间,所以他的地址和他的哥哥额成员的地址一样,联合体的内存长度有占空间最大的成员变量决定。
联合体可以以联合体内的任意类型进行输出。
联合体不能直接对l联合体对象进行赋值,只能对联合体内的成员变量进行赋值,所以第一题的AB都是错的,应该是a.i=5或者a.c='a'等等
联合体可以作为函数参数进行传递
  1. #include <stdio.h>
  2. union data
  3. {
  4.         int i;
  5.         char c;
  6.         float f;
  7. }a;
  8. void fun(union data a)
  9. {
  10.         printf("%d\n",a);
  11. };
  12. int main(void) {
  13.         a.c='a';
  14.         fun(a);
  15.         printf("%f\n",a);
  16.         return 0;
  17. }
复制代码

最佳答案

查看完整内容

第一题:C,第二题:D 联合体公用同一空间,所以他的地址和他的哥哥额成员的地址一样,联合体的内存长度有占空间最大的成员变量决定。 联合体可以以联合体内的任意类型进行输出。 联合体不能直接对l联合体对象进行赋值,只能对联合体内的成员变量进行赋值,所以第一题的AB都是错的,应该是a.i=5或者a.c='a'等等 联合体可以作为函数参数进行传递
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 23:06:08 | 显示全部楼层    本楼为最佳答案   
第一题:C,第二题:D
联合体公用同一空间,所以他的地址和他的哥哥额成员的地址一样,联合体的内存长度有占空间最大的成员变量决定。
联合体可以以联合体内的任意类型进行输出。
联合体不能直接对l联合体对象进行赋值,只能对联合体内的成员变量进行赋值,所以第一题的AB都是错的,应该是a.i=5或者a.c='a'等等
联合体可以作为函数参数进行传递
  1. #include <stdio.h>
  2. union data
  3. {
  4.         int i;
  5.         char c;
  6.         float f;
  7. }a;
  8. void fun(union data a)
  9. {
  10.         printf("%d\n",a);
  11. };
  12. int main(void) {
  13.         a.c='a';
  14.         fun(a);
  15.         printf("%f\n",a);
  16.         return 0;
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 23:09:58 | 显示全部楼层
1.C
2.B
新人刚刚学习,不知道对不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 23:41:35 | 显示全部楼层
本帖最后由 4goodworld 于 2020-3-21 23:43 编辑

题一:C 题二:C
union共同体主要关注概念:
1.在 C 语言中,允许几种不同类型的变量存放到同一段内存单元中,也就是使用覆盖技术,几个变量互 相覆盖。这种几个不同的变量共同占用一段内存的结构,被称为共用体类型结构,简称共用体(所以题二B选项是对的)
2.共同体所占用的内存空间为最长的成员所占用的空间 (所以题二A选项是对的)
3.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,并且,不能在定义共用体变量时对它进行初始化。 (所以题一ABD似乎都不对,题二D选项是对的)
4.不能把共用体变量作为函数参数, 也不能是函数返回共用体变量, 但可以使用指向共用体变量的指针。 (所以题二C选项是错的)
我也是网上找的资料,概念(或者说是规则)没有太多为什么,我们得按照规则来办就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 13:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表