2020-12-27C/C++学习00
请注意,本文编写于 702 天前,最后修改于 702 天前,其中某些信息可能已经过时。

目录


非基本数据类型

  • C语言提供了一些有系统定义好的基本数据类型,例如:charshortintlongfloatdouble等。用户可以在程序中用他们定义变量,解决程序中一般不太复杂的问题。

但人们在处理逻辑关系时,往往都很复杂,仅仅依靠系统提供的基本数据类型满足不了程序的要求,所以C语言允许用户根据自己的需求建立一些数据类型,来定义变量。这就是非基本数据类型,如结构体共用体枚举等。

一、结构体

  • 在前面的学习工程中,常见到的数据类型只能存储一种诗句类型,例如char型只能存储一个字节的字符型数据,int型只能存储四个字节的整型数据,根据此可以看出基本数据类型都只能存储对应的一种数据类型。
  • 但我们在实际开发过程中,往往遇到的逻辑关系都比较复杂且相互之间都有内在联系。如果数据都单独存放将使数据之间的关系变得混乱不堪。C语言允许我们组建不同数据类型的集合。这种集合式的类型称为结构体类型

1.1 结构体定义

c
struct 结构体名
{
    成员类型1 成员名1;
    成员类型2 成员名2;
};

strcut tag_Data
{
    int nYear;
    int nMonth;
    int nDay;
};

strcut tag_Student
{
    int nId;
    char chaName[32];
    int nGender;
    struct tag_Data Birthday;
}Stu1,Stu2 = {...,...,};//定义结构体变量


Stu1.nId = 1;
strcpy(Stu1.chaName,"赵铁柱");
Stu1.nGender = 1;
Stu1.Birthday.nYear = 2020;
  • .成员运算符。在所有运算符中优先级最高
  • 结构体中的数据只能分别进行输入和输出。

1.2 结构体数组

一个结构体变量中可以存放一组数据 ,如果需要存储多组数据的时候,显然需要应用到数组,这就是结构体数组

c
strcut tag_Student theStu[3] = {"he",1,"hl",2,"ho",3};//能够保存3个学生信息

theStu[0].nId = 2;
strcpy(theStu[0].chaName,"赵铁柱");

... ...

1.3 结构体指针

c
struct Student* IpStu;
struct Student theStudent = {"hell",3};
Student* pStudent = &theStudent;
(* pStudent).count = 6;
pStudent->count = 5;

1.4 结构体传参

c
void fun(tag_Student theStu);
void fun2(tag_Student* theStu);

二、 共用体

  • 在同一段内存单元存放不同类型的变量。不同的变量共享同一段内存的结构,称为共用体类型结构
  • 每次赋值只保存最后一次赋值结果。

2.1 共用体特点

  1. 联合体的成员是共享内存空间的

  2. 联合体的内存空间大小,是联合体成员中对内存空间大小要求最大的空间大小,比如联合体内有char和int,那么联合体大小就是4个字节

  3. 联合体最多只有一个成员有效,并不是说只能用一个成员,而是他只按一个成员来操作,也就是空间分配上只按一个分配

2.2 共用体定义

c
union 共用体名
{
    成员列表
}变量列表;

union Data
{
    int i;
    char szBuff[10];
};

union Data theData;
theData.i = 10;
strcpy(theData.szBuff,"hello");

三、枚举

  • 一个被命名的整型常量的集合,也叫枚举。

3.1 枚举定义

c
enum 枚举名 {枚举元素列表};

3.2 枚举使用

c
enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun }; //从1开始递归,与上面功能一样。,后面的值是前面的值加1
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } num1,num2,num3;
enum week num1 = Mon;

四、typedef

  • typedef 用来指定新的类型名来代替已有的类型名。
c
typedef int MyInt;
typedef strcut tag_Data
{
    int nYear;
    int nMonth;
    int nDay;
}Data;


Data StuData;
StuData.nYear = 2020;

本文作者:Na1r

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!