全面了解结构体、联合体和枚举类型

一. 结构体:

1. 定义结构体类型:

struct 结构体
   {
       任意类型 任意变量;
       任意类型 任意变量;
       ……
};

注意:这不是定义变量,而是自定义一种类型而已。

struct student
   {
    char name[10];//学生姓名
            int height;//学生身高
            bool sex;//学生性别 假设0表示女,1表示男。
          };//此处分号不能少。

2. 定义结构体变量。

类型定义好以后,则可以定义该类型的变量。

定义结构体变量:

struct student a,b;// struct可以省略。
可以在定义结构体变量的时候赋值。
如student a={”liudehua”,172,1},b={“lixiaolong”,172,1};
也可以在定义结构体变量以后赋值,但注意不能再用{}。

如:

student a,b;
a={”liudehua”,172,1},b={“lixiaolong”,172,1};//这是错误的。

而应该是:
strcpy(a.name,”liudehua”);

a.height=172;
a.sex=1;

3.可以在定义结构体类型的时候同时定义结构体变量并赋值。

struct student
   {
    char name[10];//学生姓名
            int height;//学生身高
            bool sex;//学生性别 假设0表示女,1表示男。
         
} a={”liudehua”,172,1},b={“lixiaolong”,172,1};

4.访问结构体:

访问结构体成员要用直接成员运算符“.”或间接成员运算符“->”。
     student a={”liudehua”,172,1};
     cout<<a.name<<a.height<<a.sex;
     student *p=&a;
cout<<p->name<<p->height<<p->sex;

对于结构体变量,访问其中的成员采取“结构体变量.成员”的形式;而对于结构体指针,访问它所指向的结构体变量中的成员,则采取“结构体指针->成员”形式。

二.联合体

联合体也是一种自定义的复合类型,它可以包含多个不同类型的变量。这些变量在内存当中共用一段空间。这段空间的size就是各变量中size最大的那个变量。

1定义联合体类型:

union myunion
{int num1;
Double num2;
Float num3;
};

定义了一个联合体类型myunion。
myunion a,b;//定义了两个myunion型变量。
也可以在定义联合体类型的时候定义联合体变量。

如:

union myunion
{int num1;
Double num2;
Float num3;
}a,b;

a占用的空间有多大呢?
Sizeof(a)结果即为8,即myunion占用8个字节,和double型变量相同。
注意:任一时刻,只能访问结构体里面的一个变量。

a.num1=2;
      a.num2=3.154;
myunion *p;
p=&a;
p->num3=5.6;

三.枚举类型

1.枚举类型的定义:
枚举类型也是一种自定义的复合类型。不过,枚举类型中的成员都是常量。

enum color

   red,
   green,
   blue,
   white,
   black
};

枚举类型中的成员默认值为从0开始,依次序递增。此时red==1,green为2,blue为3,white为4,black为5.
也可以改变起默认值。

enum color

   red=1,
   green=3,
   blue=5,
   white,
   black
};

没有初始化的枚举类型成员的值将在它前面的成员基础上递增。
所以,white的值为6,而black的值为7.

2.定义枚举变量:

color a1,a2;

3.给枚举变量赋值:
   a1=red;
   a2=blue;
cout<<a1<<a2;//输出结果是15

虽然枚举常量的值整数,但是不能直接将整数值赋给枚举变量。

a1=1;//这是不对的。因为类型不匹配。一个是整型,一个是枚举类型。
a1=(color)1;//正确

枚举变量的size是一个整数的大小。

以上这篇全面了解结构体、联合体和枚举类型就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C#语言基础——结构体和枚举类型全面解析

    一.结构体(struct) 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承. 用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等.这可以节省内存,因为没有如类对象所需的那样有额外的引用产生.例如,当声明含有成千上万个对象的数组时,这会引起极大的差异. 结构体是一个变量组,将一组变量放在一起,其实就是一个自定义

  • C#结构体特性实例分析

    本文实例讲述了C#结构体特性.分享给大家供大家参考.具体如下: 结构体的定义: 结构体也可以象类一样可以单独定义. class a{}; struct a{}; 结构体也可以在名字前面加入控制访问符. public struct student{}; internal struct student{}; 如果结构体student没有publice或者internal的声明 类program就无法使用student结构定义 obj对象 如果结构体student的元素没有public的声明,对象ob

  • 详解C++程序中定义struct结构体的方法

    什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同. 结构体的定义 定义结构体使用struct修饰符,例如: struc

  • C语言中的结构体的入门学习教程

    C语言中数组允许定义类型的变量,可容纳相同类型的多个数据项,但结构体在C语言编程中,它允许定义不同种类的数据项可供其他用户定义的数据类型. 结构是用来代表一个记录,假设要跟踪图书馆的书籍.可能要跟踪有关每本书以下属性: Title - 标题 Author - 作者 Subject - 科目 Book ID - 编号 定义结构体 定义一个结构体,必须使用结构体的struct语句.该struct语句定义了一个新的数据类型,程序不止一个成员.struct语句的格式是这样的: struct [struc

  • 全面了解结构体、联合体和枚举类型

    一. 结构体: 1. 定义结构体类型: struct 结构体    {        任意类型 任意变量:        任意类型 任意变量:        -- }: 注意:这不是定义变量,而是自定义一种类型而已. 如 struct student    {     char name[10];//学生姓名             int height;//学生身高             bool sex;//学生性别 假设0表示女,1表示男.           }://此处分号不能少.

  • C语言自定义类型超详细梳理之结构体 枚举 联合体

    目录 一.什么是结构体 1.结构体实现 2.匿名结构体类型 3.结构体自引用 4.结构体的内存对齐 5.结构体位段  二.什么是枚举 1.枚举类型的定义 2.枚举的优点 三.联合(共用体) 1.什么是联合(共用体) 2.联合(共用体)的定义 3.联合(共用体)的初始化 总结 一.什么是结构体 结构是一些值的集合,这些值称为成员变量.结构的每个成员可以是不同类型的变量. //结构体声明 struct tag //struct:结构体关键字,tag:标签名,合起来是结构体类型(类型名) { memb

  • C语言结构体,枚举,联合体详解

    目录 1.什么是结构体.枚举.联合体 2.定义结构体 2.1 包含结构体成员变量.variable 2.2 tag.结构体成员变量 2.3 用结构体声名变量 2.4 用typedef 创建新类型 2.5 两个结构体相互包含 2.6 结构体变量初始化 2.7 结构体指针 3.枚举 3.1 定义方式 3.2 为什么用枚举 3.3 枚举变量的定义 3.4 实例 3.5 枚举实际用途 4.联合体 4.1 与结构体区别 4.2 定义 总结 1.什么是结构体.枚举.联合体 结构体(struct)是由一系列具

  • C#枚举类型和结构体详解

    注意:枚举类型和结构体都属于值类型. 结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的方法: struct student { public int nianling; public int fenshu; public string name; public string sex; public int sum; } 以上的语句就是定义一个名称为student的结构体,其中包含int类型的年龄.分数.总和,和string类型的姓名.性别. 二.用法: 在

  • C语言超详细讲解结构体与联合体的使用

    目录 结构体 offsetof-宏 位段 枚举 联合体(共用体) 结构体 结构体内存对齐问题: 当我们在计算结构体的大小时,我们便需要清楚的知道结构体内存对齐是什么. 存在内存对齐的原因可细分为两个: 平台原因: 不是所有的硬件平台都能方位任意地址上的任意数据:某些硬件平台只能在某些地址处取某些特定类型的数据,否则会抛出硬件异常. 性能原因: 首先内存对齐可以提高程序的性能,当访问未对其的内存空间时,有时候处理器需要进行两次访问,而当访问对齐的内存时,只需要一次就够了.这同时也被叫做 用空间换取

  • 初步剖析C语言编程中的结构体

    C语言结构体,可谓是C强大功能之一,也是C++语言之所以能衍生的有利条件,事实上,当结构体中成员中有函数指针了后,那么,结构体也即C++中的类了. C语言中,结构体的声明.定义是用到关键字struct,就像联合体用到关键字union.枚举类型用到enum关键字一样,事实上,联合体.枚举类型的用法几乎是参照结构体来的.结构体的声明格式如下: struct tag-name{ { member 1; - member N; }; 因此,定义结构体变量的语句为:struct tag-name vari

  • 解析C/C++指针、函数、结构体、共用体

    目录 指针 变量与地址 指针与指针变量 占内存空间 指针运算 指针 变量与地址 变量给谁用的?变量是对某一块空间的抽象命名.变量名就是你抽象出来的某块空间的别名.指针就是地址.指向某个地址. 指针与指针变量 指针是指向某块地址.指针(地址)是常量.指针变量是可以发生变化的. #include <stdio.h> int main() { int i = 1; int *p = &i; printf("i = %d \n", i); printf("&

  • Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析

    本文以实例详细描述了Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect的定义及用法,具体如下所示: 1.NSRange: NSRange的原型为 typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange; NSMakeRange的函数: NS_INLINEz是内联函数 typedef NSRange *NSRangePointer; NS_IN

  • 浅析C# 结构体struct

    结构体 有时候我们仅需要一个小的数据结构,类提供的功能多于我们需要的功能:考虑到性能原因,最好使用结构体. 结构体是值类型,存储在栈中或存储为内联(如果结构体是存储在堆中的另一个对象的一部分). 例如类class: public class Dimensions { public Dimensions(double length, double width) { Length = length; Width = width; } public double Length { get; set;

  • C语言中结构体与内存对齐实例解析

    1.结构体类型 C语言中的2种类型:原生类型和自定义类型,结构体类型是一种自定义类型. 2.结构体使用时先定义结构体类型再用类型定义变量 -> 结构体定义时需要先定义结构体类型,然后再用类型来定义变量. -> 也可以在定义结构体类型的同时定义结构体变量. // 定义类型 struct people { char name[20]; int age; }; // 定义类型的同时定义变量. struct student { char name[20]; int age; }s1; // 将类型st

随机推荐