张世来4610484 发表于 2020-3-21 23:06:07

共用体

题目一:若有以下定义和语句:
union data
{
        int i;
        char c;
        float f;
}a;
int n;
则以下语句正确的是_____
A a=5; B a={2,'a',1.2}   C printf("%d\n",a); D n=a;


题目二:设有以下说明,则下面不正确的叙述是____
union data
{
        int i;
        char c;
        float f;
}un;

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

对共用体不熟,感觉题目一都是错的,题目二C D也是错的,麻烦会的给出详细点的解释

sunrise085 发表于 2020-3-21 23:06:08

第一题:C,第二题:D
联合体公用同一空间,所以他的地址和他的哥哥额成员的地址一样,联合体的内存长度有占空间最大的成员变量决定。
联合体可以以联合体内的任意类型进行输出。
联合体不能直接对l联合体对象进行赋值,只能对联合体内的成员变量进行赋值,所以第一题的AB都是错的,应该是a.i=5或者a.c='a'等等
联合体可以作为函数参数进行传递
#include <stdio.h>
union data
{
      int i;
      char c;
      float f;
}a;
void fun(union data a)
{
        printf("%d\n",a);
};
int main(void) {
        a.c='a';
        fun(a);
        printf("%f\n",a);
        return 0;
}

xiaomei47580 发表于 2020-3-21 23:09:58

1.C
2.B
新人刚刚学习,不知道对不对?

4goodworld 发表于 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选项是错的)
我也是网上找的资料,概念(或者说是规则)没有太多为什么,我们得按照规则来办就好了。
页: [1]
查看完整版本: 共用体