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

一. 结构体:

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是一个整数的大小。

时间: 2024-09-16 22:47:37

全面了解结构体、联合体和枚举类型_C 语言的相关文章

详解C语言结构体中的函数指针_C 语言

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的. 函数指针 函数类型 (*指针变量名)(形参列表):第一个括号一定不能少. "函数类型"说明函数的返回类型,由于"()"的优先级高于"*",所以指针变量名外的括号必不可少.  注意指针函数与函数指针表示

C#关于给结构体中的枚举类型成员,通过键盘键入值的问题

问题描述 初学,请高手指教!代码如下namespaceConsoleApplication1{enumgender{男,女}publicstructpeople{publicstringname;publicgendersex;publicintage;}classProgram{staticvoidMain(string[]args){peopleperson;Console.WriteLine("请输入名字:");person.name=Console.ReadLine();Con

详解C语言中的内存四区模型及结构体对内存的使用_C 语言

内存四区 1.代码区代码区code,程序被操作系统加载到内存的时候,所有的可执行代码都加载到代码区,也叫代码段,这块内存是不可以在运行期间修改的.2.静态区所有的全局变量以及程序中的静态变量都存储到静态区.3.栈区栈stack是一种先进后出的内存结构,所有的自动变量,函数的形参都是由编译器自动放出栈中,当一个自动变量超出其作用域时,自动从栈中弹出.对于自动变量,什么时候入栈,什么时候出栈,是不需要程序控制的,由C语言编译器.实现栈不会很大,一般都是以K为单位的. 当栈空间以满,但还往栈内存压变量

解析C语言中结构体struct的对齐问题_C 语言

首先看一下结构体对齐的三个概念值: 数据类型的默认对齐值(自身对齐): 1.基本数据类型:为指定平台上基本类型的长度.如在32位机器中,char对齐值为1,short为2,int,float为4,double为8: 结构体:其数据成员中默认对齐值最大的那个值. 2.指定对齐值:#pragma pack (value)时的指定对齐值value. 3.数据类型的有效对齐值:默认对齐值和指定对齐值中小的那个值. 有了这些值,我们就可以很方便的来讨论具体数据结构的成员和其自身的对齐方式.有效对齐值N是最

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

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

结构体struct、枚举enum、联合体union、位字段、自定义类型typedef、字节对齐

结构体struct 1 结构体的基本知识 2 结构体与函数 3 结构体数组 4 自引用结构体 枚举变量enum 联合体union 位字段 1 一般的方法定义屏蔽吗 2 用位字段来定义屏蔽吗 自定义类型typedef 字节对齐 pragma pachx 按x个字节对齐 1.结构体struct 1.1 结构体的基本知识 #include <stdio.h> struct point{ int x; int y; }p1, p2, p3; struct point pt; struct point

C/C++程序开发中实现信息隐藏的三种类型_C 语言

无论是模块化设计,还是面向对象设计,还是分层设计,实现子系统内部信息的对外隐藏都是最关键的内在要求.以本人浅显的经验,把信息隐藏按照程度的不同分成(1)不可见不可用(2)可见不可用(3)可见可用. 1 不可见不可用 就是说模块内部的变量.结构体.类定义对外部而已完全隐藏,外部对此一无所知.常用的实现方法就是利用不透明指针,请参见我的博文C语言开发函数库时利用不透明指针对外隐藏结构体细节. 这种方法同样适用于C++语言,一种可能的实现方式为面向接口编程. 头文件 IMyClass.h class

C++ 中const和复合类型_C 语言

1.const和引用 可以把引用绑定在常量上,称之为,对常量的引用.不能对那个引用赋值. 如: const int ci = 1024; const int &ri = ci; 解读:ri是对ci的引用.ri的const意思是视ci为变量. 对于常量,只能使用"对常量的引用"这个引用方式 int &ri = ci;是错误的,因为ci不能赋值,但是可能会对ri赋值从而影响const限定. 所以,他们(制定标准的人)创造了 对常量的引用 的 引用方式. 下面高能!!! 上面

C++程序的执行顺序结构以及关系和逻辑运算符讲解_C 语言

C++顺序结构程序[例]求一元二次方程式ax2+bx+c=0的根.a,b,c的值在运行时由键盘输入,它们的值满足b2-4ac≥0.根据求x1,x2的算法.它可以编写出以下C++程序: #include <iostream> #include <cmath> //由于程序要用到数学函数sqrt,故应包含头文件cmath using namespace std; int main( ) { float a,b,c,x1,x2; cin>>a>>b>>