第二十四周项目7-读懂“共同体”

运行下面的程序,并解释运行结果。

#include <iostream>
using namespace std;
union un
{
    int i;
    char c[4];
};
int main()
{
    union un x;
    x.c[0]='A';
    x.c[1]='B';
    x.c[2]='C';
    x.c[3]='D';
    cout<<x.i<<endl;
    return 0;
}

#include <iostream>
using namespace std;
union un
{
    int i;
    char c[4];
};
int main()
{
    un x;
    x.c[0]='A';
    x.c[1]='B';
    x.c[2]='C';
    x.c[3]='D';
    cout<<x.c[2]<<endl;
    return 0;
}

通过watch窗观察:

so:

结构体的引入,用户可以方便定义新的数据类型,用成员变量来存储事物不同方面的特性。但是结构体每一个成员变量均需要占用一定的存储空间,与实际的要求存在一定的差距。引入的新的自定义数据类型共用体(union),很像结构体类型,有自己的成员变量,但是所有的成员变量占用同一段内存空间。对于共用体变量,在某一时间点上,只能存储其某一成员的信息。

结构体是由不同数据类型组成的一个结构,存储空间是所有成员需要的空间的总和,结构成员是同时存在的。而共同体则是不同数据类型共享一个存储空间,空间的大小是能容纳共同体成员中的最大者。共同体成员的值不可能同时存在。

@ Mayuko

时间: 2024-12-26 11:25:33

第二十四周项目7-读懂“共同体”的相关文章

第二十四周项目4-猴子选大王(约瑟夫问题)

一群猴子,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王.输入m和n,输出为大王的猴子是几号. 提示1:(1)链表解法:可以用一个循环的单链表来表示这一群猴子.表示结点的结构体中有两个成员:一个保存猴子的编号,一个为指向下一个人的指针,编号为m的结点再指向编号为1的结点,以此构成环形的链.当数到第n个时,该结点被删除,继续数,直到只有一个结点.(2)使用结构数组来表示

第二十四周项目6-点和距离

读程序,写出函数的定义,注意其中枚举类型的用法. enum SymmetricStyle {axisx,axisy,point};//分别表示按x轴, y轴, 原点对称 struct Point{ double x; // 横坐标 double y; // 纵坐标 }; double distance1(Point p1, Point p2); // 两点之间的距离,如果用distance,将会与命名空间std中也已经定义的distance函数重名 double distance0(Point

第二十四周项目1-哈希法的存储与查找

在实际的工程中,大量使用哈希法. 关于哈希法: 下面是采用哈希法存储数据并实现查找的示例.实现哈希函数用"除法取余法",解决冲突为"开放地址法". #include <iostream> using namespace std; int searchHash(int h[], int l, int key); void insertHash(int h[], int l, int data); int main() { const int hashLen

第二十四周项目2-回溯法走迷宫

问题: 迷宫问题中,在寻找路径时,采用的方法通常是:从入口出发,沿某一方向向前试探,若能走通,则继续向前进:如果走不通,则要沿原路返回,换一个方向再继续试探,直到所有可能的能跟都试探完成为止.为了保证在任何位置上都能沿原路返回(回溯),要建立一个后进先出的栈来保存从入口到当前位置的路径. 而且在求解迷宫路径中,所求得的路径必须是简单路径.即在求得的路径上不能有重复的同一块通道. 为了表示迷宫,设置一个数组,其中每个元素表示一个方块的状态,为0时表示对应方块是通道,为1时表示对应方块为墙,数组如下

第二十四周项目3-动态链表体验

下面是一个建立动态链表的程序.阅读程序,在草稿纸上画出链表建立的过程,借此学会如何建立链表.然后按要求改造程序. #include <iostream> using namespace std; struct Node { int data; //结点的数据 struct Node *next; //指向下一结点 }; Node *head=NULL; //将链表头定义为全局变量,以便于后面操作 void make_list(); //建立链表 void out_list(); //输出链表

第二十四周项目5-应用枚举

(1)阅读教材7.3节,了解枚举类型的一般用法.阅读下面输出He先生买车方案的程序,理解使用枚举类型的意义. #include <iostream> using namespace std; enum Color {red,black,white}; enum Brand {lavida,tiggo,skoda}; int main( ) { int color,brand; for(color=red; color<=white; color++) for(brand=lavida;

十四周 项目 1 动物这样叫

#include <iostream> #include <string> using namespace std; class Animal { public: virtual void cry() { cout<<"不知哪种动物,让我如何学叫?"<<endl; } }; class Mouse:public Animal { public: Mouse(string nam,char s):name(nam),sex(s) {} vo

第十四周 项目一 小玩文件

<span style="font-size:18px;">[项目1 - 小玩文件] (1)下面程序的功能是统计文本文件abc.txt中的字符个数,</span> <span style="font-size:18px;">#include <iostream> #include <cstdlib> #include <fstream>// //fstream提供了三个类,用来实现c++对文件的

hiho一下 第二十四周---最短路径&#183;二:Floyd算法

最短路径·二:Floyd算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的中午,小Hi和小Ho在吃过中饭之后,来到了一个新的鬼屋! 鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是同一个地点的道路. 由于没有肚子的压迫,小Hi和小Ho决定好好的逛一逛这个鬼屋,逛着逛着,小Hi产生了这样的问题:鬼屋中任意两个地点之间的最短路径是多少呢? 提示:其实如果你开心的话,完全可以从