浅谈c++中结构体和共用体的区别

在c++中,结构体(struct)和共用体(union)是两种很相似的复合数据类型,都可以用来存储多种数据类型,但是两者还有很大的区别。

  1. 结构体(struct)

    结构是用户自定义的类型,比数组更灵活,同一个结构可以存储多种类型的数据。

    结构的创建包括两步,首先定义结构描述---描述并标记了能够存储在结构中的各种数据类型。

    struct  shoes {

    char name[20];

    int size;

    double price;

    };

    下面就可以按描述创建结构变量。

    shoes sport;

    [struct] shoes boot;(c++中struct 可以省略)

    在c++中,结构声明可以说是定义了一种新类型,结构名相当于基本类型名。使用结构体,通过结构变量名使用成员操作符(.)来访问各个成员,如sport.name。访问类成员函数的方式就是从访问结构成员变量的方式衍生而来的。

  2.  

    共用体(union)

    共用体也是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,结构可以同时存储int、long和double,共用体只能存储int、long或者double中的一种。共用体的句法与结构类似,但含义不同。

    union one4all {

    int int_val;

    long long_val;

    double double_val;

    };

    可以使用one4all变量来存储int、long 或double,条件是在不同的时间进行。

    定义一个共用体变量,one4all pail;

    pail使用成员操作符访问其中变量时只有一个成员是当前成员,即one4all中的三个变量共享一个地址,当pail访问int_val时,内存中存储的就是int型。

    共用体的用途之一就是,当数据使用两种或更多种格式(但不会同时使用)时,可以节省空间。

时间: 2024-08-04 18:30:23

浅谈c++中结构体和共用体的区别的相关文章

浅谈haskell中functor typeclass和普通typeclasses的区别

其实这个区别就好像普通函数和高阶函数的区别一样.这样是不是很好理解了呢,额,如果你说你还不知道啥是高阶函数,那么还是不要看这个文章了.下面来看看我是如何把他们类比起来的. 我们看看haskell中的Eq是如何定义的,这个我把它叫"普通typeclasses"(为了区分functor typeclasses,我就这么叫它了:P),这里定义了一个typeclasses并且在这个typeclasses里面定义了一个行为,普遍的说法就是你可以把这个typeclasses想象成java的inte

浅谈js中a+++a与a+a++值区别

1.a++与++a区别           (1).a++是先运算再赋值自增,用旧值(未自增的值)计算,也就是输出旧值           (2).++a是先自增赋值再运算,用新值(自增后的值)计算,也就是输出新值. 2.由于后置等增运算符优先级高于前置递增运算符,a+++a等价于(a++)+a,先直接将a的旧值进行计算,然后a再自增赋值给后面的a值. 3.由于后置运算符优先于加法,a+a++等价于a+(a++),先将a值直接带入,而后面的a++,先自增再赋值运算. 4.运算机制 + / / a

浅谈Linux中的信号机制(二)

首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Linux内核源码评头论足.以后的路还很长,我还是一步一个脚印的慢慢走着吧,Linux内核这座山,我才刚刚抵达山脚下. 好了,言归正传,我接着昨天写下去.如有错误还请各位看官指正,先此谢过. 上篇末尾,我们看到了这样的现象:send进程总共发送了500次SIGINT信号给rcv进程,但是实际过程中rcv只接受/处理了1

结构体、共用体、枚举____笔记

-------------------讲在前面 老规矩,本人小菜. 互联网是发达的,神奇的.其中,有开源与不开源一说,我不知道我懂多少. 我在网上取我所需,但是有时候会标注来源,有时候没标注.如果某大神觉得被冒犯了,请联系删除. 我会有复制粘贴,但我并不认为拿过来就是我的东西,只是纯粹的欣赏,学习. 开博客,主要是觉得对自己学习有益.我会记录自己觉得有意义的东东. 如果有人见到本文章,是我的荣幸,希望对你有所帮助. 当然,我不保证绝对正确,若你发现不对的地方,可以评论或者联系,指正批评,大家相互

结构体和共用体

一.结构体和共用体的区别 1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在.在struct中,各成员都占有自己的内存空间,它们是同时存在的.一个struct变量的总长度等于所有成员长度之和.在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在.Union变量的长度等于最长的成员的长度. 2. 对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对

「C语言」「例题」结构体与共用体

本篇收集<C语言程序设计教程>第九章“结构体与共用体”的所有例题. 1 #include <stdio.h> 2 3 /*输入一个学生的基本信息, 4 包括学号.姓名.性别.年龄.出生日期.三门成绩, 5 输出该学生的基本信息和平均成绩*/ 6 7 struct date 8 { 9 int year;/* 年份 */ 10 int month;/* 月份 */ 11 int day; /* 日期 */ 12 }; 13 14 struct student 15 { 16 char

结构体、共用体和位运算

1.C语言结构体的定义和使用 在实际问题中,一组数据往往具有不同的数据类型:例如在学生信息登记表中,姓名为字符型,学号为整型或字符型,年龄为整型,性别为字符型,成绩为整型或实型.因为数据类型不同,显然不能用一个数组来存放. 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.定义结构体的一般形式为: struct 结构体名{ 成员列表 }; 每个成员都是结构体的组成部分,有名字,也有数据类型,形式为: 类型说明符 成员名; 例如用结构体来表示学生信息: struct stu{ c

C++程序设计之结构体,共用体,枚举和typedef

[1]结构体的基本功 注意结构体里面可以有很多东西,可以结构体里面包含结构体 #include<iostream> using namespace std; struct Date { int month; int day; int year; }; struct Student { int num; char name[20]; char sex; Date birthday; float score; }student1,student2= {1002,"wangli"

typedef,结构体,共用体,联合体

typedef的用途: 封装数据类型,方便移植 简化函数指针的定义 结构体:不同类的型元素汇聚. (1).在声明类型的同时定义变量: struct结构体名{   成员列表 }变量名列表; (2).直接定义结构体类型变量 struct {     成员列表 }变量名表列; 指向结构体变量的指针 定义形式:struct结构体名 *结构体指针名; 例如:struct student *p; #define_CRT_SECURE_NO_WARNINGS  //去掉安全检查 #include<stdio.