C语言------结构体和共同体

1.结构体是一种构造类型,它是由若干成员组成的,其中每个成员可以是一个基本数据类型或者是一个构造类型。声明结构体时使用关键字struct。

2..声明一个结构体表示的是创建一个新的类型名,要用新的类名再定义变量,定义方式有三种:

  A.声明结构体,然后再定义变量。

    struct  Product

    {成员列表};

    struct Product product1;

    struct Product product2;

  B.在声明结构类型时,同时定义变量。

    struct Product

    {

      char cName[10];

      char cShape[20];

    }product1, product2;

    PS:注意变量的名称要放在最后的分号前面;定义的变量不是只能有一个,可以定义多个变量 

  C.直接定义结构体类型变量。

    struct

    {

      成员列表

    }变量名列表;

3.在引用结构体的成员时,可以在结构的变量名的后面加上成员运算符"."和成员的名字,例如:product1.cName

4结构体类型与其他基本类型一样,可以在定义结构体变量时指定初始值。例如:

  struct Student

  {

    char cName[20];

    char cSex;

    int iGrade;

  }student1 = {"HanXue", "W", 3};

  PS:定义的变量后面使用等号,然后将其初始化的值放在大括号中,并且每一个数据要与结构体的成员列表的顺序一样。

5.结构体数组与数组的区别在于,数组中的元素是根据要求定义的结构体类型而不是基本类型。

6.定义一个结构体数组的方式与定义结构体变量的方法相同,也是有三种方式,只是结构体变量替换成数组而已,一般形式为:

  struct 结构体名

  {

    成员列表;

  }数组名;

7.初始化结构体数组的一般形式为: 

 struct 结构体名

  {

    成员列表;

  }数组名={初始化值列表};

8.结构体指针的一般形式为: 结构体类型 *指针名;  struct Student *pStruct;

9.使用指向结构体变量的指针访问成员有两种方法,pStruct为指向结构体变量的指针。

  A. (*pStruct).成员名   结构体变量可以使用点运算符对其中的成员进行引用,*pStruct表示指向的结构体变量,因此使用点运算符可以应用在结构体的成员变量上,注意由于点 算符的优先级最高,如果不使用括号把指针括起来的话,则有问题。

  B. 使用指向运算符引用结构成员。pStruct -> 成员名;

10. 假如student为结构体变量,pStudent为指向结构体变量的指针,可以看出以下3种形式的效果是等价的

  student.成员名

  (*pStruct).成员名

  pStruct->成员名

11.在使用“->”引用成员时,要注意分析以下情况:

  (1)pStruct -> iGrade,表示指向的结构体变量中成员iGrade的值;

  (2)pStruct -> iGrade++,表示指向的结构体变量中成员iGrade的值,使用后该值加1;

  (3)++pStruct -> iGrade,表示指向的结构体变量中成员iGrade的值加1,计算后再进行使用;

12.可以将结构体变量的值作为一个函数的参数,使用结构体作为函数的参数有3种形式:

  A. 使用结构体变量作为函数参数 void Display(struct Student stu);

  B. 使用指向结构体变量的指针作为函数参数;void Display(struct Student* stu);

  C.使用结构体变量的成员作为函数参数;Display(student.fScore[0]);

13.在链表这种数据结构中,必须利用指针才能实现,因此链表中的节点应该包含一个指针变量来保存一下一个节点的地址。

14.malloc函数,void *malloc(unsigned int size)功能:在内存中动态分配一块size大小的内存空间,函数返回一个指针,指向分配的内存空间,若出错则返回NULL;

15.calloc函数,void *calloc(unsigned n,unsigned size)功能:在内存中动态分配n个长度为size的连续内存空间数组,calloc返回一个指针,指向动态分配的连续内存空间地址。

16.free函数,void free(void *ptr)功能:使用由指针ptr指向的内存区,使部分内存区域能被其他变量使用。ptr是最近一次调用calloc或malloc函数时返回的值。free函数无返回值

17.共用体看起来很像结构体,只不过将关键字有struct换成了union。共用体和结构体的区别在于:结构体定义了一个由多个数据成员组成的特殊类型,而共用体定义了一块为所有        数据成员共享的内存。

18.需要注意的是,结构体变量的大小是其所包括的所有数据成员大小的总和,其中每个成员分别战友自己的内存单元,而共用体的大小为所包含数据成员中最大内存长度的大小。

19.在使用共用体时需要注意以下特点:

  A.同一个内存段可以用来存放几种不同类型的成员,但是每一次只能存放其中一种而不是同时存放所有的类型,也就是说在共用体中,只有一个成员起作用,其他成员不起作用

  B.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。

  C.共用体变量的地址和它的各成员的地址是一样的。

  D.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。

20.利用关键字enum可以声明枚举类型,这也是一种数据类型。一个枚举变量包含一组相关的标识符,其中每个标识符都对应一个整数值,称为枚举常量。例如定义一个枚举类型的变量,其中每个标识符都对应一个整数值。enum Colors(Red, Green, Blue) Colors就是定义的枚举类型变量,在括号中的第一个标识符对应着数值0,第二个对应1,以此类推。每个标识符都必须是唯一的,而且不能采用关键字或当前作用域内的其他相同的标识符。

21. 在定义枚举型变量时,可以为某个特定的标识符指定其对应的整型值,紧随其后的标识符对应的值加1,例如:enum Colors(Red = 1, Green, Blue),其中Green对应2。

         

猜你喜欢

转载自www.cnblogs.com/kennyael/p/9750482.html