C语言基础知识整理17用户自定义数据类型——结构体变量

用户自定义数据类型

C提供一些已定义的数据类型:int,float等,可以用于解决一般问题,也允许用户根据需要自己建立一些数据类型,用其定义变量,以解决复杂问题。

结构体变量

C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,称为结构体(structre。在其他高级语言中称为“记录”(record)。

结构体类型定义 struct 结构体名{成员表列};

struct 结构体名    

{成员表列};        

//结构体类型的名字是由一个关键字struct和结构体名组合而成的。

//结构体名(结构体标记)是由用户指定的,习惯性首字母大写,以区别于其他结构体类型

//花括号内是该结构体所包括的子项,称为结构体的成员(member)

//对各成员都应进行类型声明,即:类型名 成员名;

//成员表列也称为域表,每一个成员是结构体中的一个域。成员名命名规则同变量名。

//成员可以属于另一个结构体类型。

//结构体类型不分配存储单元。

 

定义结构体类型变量 结构体类型名 结构体变量名;

1.先声明结构体类型,再定义该类型的变量

结构体类型名 结构体变量名;//较为灵活,可声明后随时定义,结构清晰适合大程序

//计算机对内存的管理是以“字”为单位,大多4个字节为一个字。

//因此sizeof运算符测量struct长度得到的是4的倍数

2.在声明类型的同时定义变量

struct 结构体名  

{   

          成员表列   

}变量名表列;//比较直观,适合小程序

3.不指定类型名而直接定义结构体类型变量

struct

{

          成员表列

}变量名表列;//指定无名结构体类型,无法再以此类型定义变量,不常用

 

//类型与变量不同!只能对变量赋值存取运算,不能对类型进行这类操作。类型不分配空间

//结构体类型中成员名可以与程序中变量名相同,但两者代表不同对象。

//对结构体变量中的成员“域”,可以单独使用,作用地位相当于普通变量。

结构体变量的初始化和引用

在定义结构体变量时,可以对它初始化,即赋予初始值。然后可以引用这个变量。

1.定义结构体变量时可以对它的成员初始化。初始化列表是用{}括起来的一些常量,这些常量依次赋给结构体变量中的各成员。//初始化的是变量,不是类型!!!

C99标准允许对某一成员初始化,如:

struct Student b={.name=“ye”};

//成员名前有成员运算符“.”,“.name”隐含代表结构体变量b.name。其他未被指定初始化的数值型成员被系统初始化为0,字符型初始化为’\0’,指针型为NULL。

2.可以引用结构体变量中成员的值,引用方式:结构体变量名.成员名。//.优先级最高

//不能企图输出结构体变量名来达到输出结构体变量所有成员的值。

//只能对结构体变量中的各个成员分别进行输入和输出。

  1. 如果成员本身又属一个结构体类型,则要用若干个成员运算符,找到最低一级地成员。只能对最低级的成员进行赋值或存取以及运算
  2. 对结构体变量的成员可以像普通变量一样进行各种运算。
  3. 同类型的结构体变量可以互相赋值
  4. 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。

//结构体变量的地址主要用作函数参数,传递结构体变量的地址。

 

结构体数组 结构体类型 数组名[数组长度];

1.声明时定义

struct 结构体名

{成员表列} 数组名[数组长度];

2.先声明后定义

结构体类型 数组名[数组长度];

3.对结构体数组初始化的形式是在定义数组后加上:  ={初值表列};

 

结构体指针 结构体类型 *指针名

结构体指针就是指向结构体变量的指针,一个结构体变量的起始地址就是它的指针。

若把一个结构体变量的起始地址放在一个指针中,这个指针指向该结构体变量。

 

指向结构体对象的指针变量既可指向结构体变量,也可指向结构体数组中的元素。

指向结构体变量的基类型必须与结构体变量的类型相同。

引用结构体变量中成员的值,如果p指向一个结构体变量stu,以下3种用法等价:

  1. 结构体变量名.成员名                                       (如stu.num)
  2. (*指向结构体变量名的指针).成员名      (如(*p).num)
  3. 指向结构体变量名的指针->成员名               (如p->num)

//“->”指向运算符    *p两旁括号不能省略

 

可以用指针变量指向结构体数组的元素。

不能指向数组元素的某一成员。若要将某一成员赋给它,可以用强制类型转换。

指针执行p++时,p的值增加了结构体类型的长度。

 

将一个结构体变量的值传递给另一个函数的方法:

  1. 用结构体变量的成员做参数  值传递
  2. 用结构体变量作实参   值传递   这种传递方式在时间和空间上开销较大,一般不采用
  3. 用指向结构体变量(或数组元素)的指针作实参,将结构体变量(或数组元素)的地址传给形参。

你可能感兴趣的:(C语言)