结构体与共同体

Posted xduhongyun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体与共同体相关的知识,希望对你有一定的参考价值。

在实际开发中,有时候需要处理多个基本数据类型的数据。例如,一个学生管理系统,需要的信息有姓名、学号、性别、年龄等信息,里面包含了字符型、整型、浮点和实型数据类型。在C语言中没有能够处理这样的数据类型,这是需要一个构造包含各种数据类型的类型,这种构造类型被称为结构体和共同体。

1.结构体

使用关键字  struct  定义结构体:

struct 结构体名
{
      成员列表
};

例如定义一个cat的结构体:

struct cat
{
       char catName[10];     //猫的名字
       int age;              //年龄
       float weight;         //体重
       char sex;             //性别
};

定义结构体变量

(1)声明结构体,再定义变量。

struct cat cat1;

(2)在声明结构体的同时,定义变量。

struct  结构体名
{
      成员列表;
}变量名;

以上述为例:

struct cat
{
       char catName[10];     //猫的名字
       int age;              //年龄
       float weight;         //体重
       char sex;             //性别
}cat1;

(3)直接定义结构体类型变量。

struct
{
      成员列表;
}变量名列表;

以上述为例:

struct
{
       char catName[10];     //猫的名字
       int age;              //年龄
       float weight;         //体重
       char sex;             //性别
}cat;                        //定义结构体变量

结构体初始化

以上述为例:

struct Cat
{
       char catName[10];     //猫的名字
       int age;              //年龄
       float weight;         //体重
       char sex;             //性别
}cat1={"小黄",2,2.3f,""};       //定义变量并初始化

结构体变量引用

引用结构体变量成员的一般形式为:

结构体变量名.成员名

例如:

cat.catName;
cat.age;

赋值:

cat.catName="小黄";
cat.age=2;

当结构体遇见了数组

以上的定义,只能描述一只猫的信息,当我们需要描述多只猫的信息的时候,怎么办么?这就需要数组来帮忙了。

定义和初始化:

struct Cat
{
       char catName[10];     //猫的名字
       int age;              //年龄
       float weight;         //体重
       char sex;             //性别
}cats[4]={ {"小黄",2,2.3f,""},
           {"麻花",1,1.4f,""},
           {"斑点",2,2.3f,""}
           {"财财",3,4.1f,""} };       //定义变量并初始化

结构体数组的引用:

结构体数组名[序号].成员名;

 

2.链表

 链表是一个常见的数据存储结构,数据的元素逻辑顺序通过链表中的指针链连接实现的。它就像一列火车一样,如下图所示,一个节点就相当于一节车厢,节点中可以有不同的数据类型,而连接车厢的铰链就相当于一个指针。

链表的节点包含两个内容:

(1)节点中保存的数据;

(2)下一个节点的地址指针;

技术图片

创建链表

(1)malloc()函数

malloc()函数的原型如下:

void *malloc(unsigned int size);

该函数会在内存中动态地分配一块大小合适的内存空间。malloc()函数会返回一个指针,指向分配的内存空间,如果出现错误,则返回NULL。

(2)calloc()函数

 calloc()函数的原型如下:

void *calloc(unsigned int size);

该函数会在内存中动态地分配n个长度为size的值的连续内存空间数组。calloc()函数会返回一个指针,指向动态分配的连续内存空间地址。如果出现错误,则返回NULL。

(3)free()函数

free()函数的原型如下:

void free(void *ptr);

该函数是使用由指针ptr指向的内存区,使部分内存区被其他变量使用。ptr是最近一次调用calloc()或者malloc()函数时返回的值。

 

3.共同体

定义共同体:

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

例如:

union DataUnion
{
      int iInt;
      char cChar;
}variable;

定义共同体变量:

union DataUnion variable;

初始化共同体变量时,只需要一个初始化值就足够了,其类型必须和共同体的第一个成员的数据类型一致。

例如:

union DataUnion variable={34};

引用共同体变量:

variable.iInt;
variable.cChar;

案例:

#include<stdio.h>

union DataUnion
{
      int iInt;
      char cChar;
};

int main()
{
      union DataUnion letter;
      letter.iInt=65;
      printf("修改之前:%c
",letter.cChar);
      letter.cChar=D;
      printf("修改之后:%c
",letter.iInt);
      return 0;
}

 输出:

修改之前:A
修改之后:D
请按任意键继续. . .

  

以上是关于结构体与共同体的主要内容,如果未能解决你的问题,请参考以下文章

结构体枚举共同体指针bing

数据结构实现基础

转载c++面试题

C语言-枚举共用体

C语言-枚举共用体

C++基本知识点总结(网摘)