结构体必备知识点
一、结构体:
1.概述:C语言允许用户自己指定这样一种数据结构(在一个组合项中包含若干个类型不同或者相同的数据项),它称为结构体(structure)。
基本形式如下:
struct 结构体名 {成员表列};
对各个成员类型声明: 类型名 成员名;
2.定义结构体类型变量的方法:
a.先声明结构体类型再定义变量名
b.再声明类型的同时定义变量
struct 结构体名 {成员表列}变量名表列;
c.直接定义结构体类型变量
strucr{成员表列}变量名表列;
对结构体类型的说明:
A.类型与变量是不同的概念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。
B.对结构体中的成员(即”域“),可以单独使用它的作用与地位相当于普通变量关于对成员的引用方法。
C.成员也可以是一个结构体变量。
D.成员名可以与程序中的变量名相同,二者不代表同一对象。例如:程序中可以另定义一个变量num,它与struct student中的num是两回事,互不干扰。
3.结构体变量的引用:
a.不能将一个结构体变量作为一个整体进行输入和输出,只能对结构体各个成员分别进行输入和输出。引用结构体变量中的成员方式为: 结构体变量名。成员名
b.如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最底一级的成员。只能对最低级的成员进行赋值或存取以及运算。
c.对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。
d.可以引用结构体变量成员的地址,也可以引用结构体变量的地址。
4.结构体变量的初始化:和其他类型变量一样,对结构体变量可以在定义时指定初始值。
5.结构体数组:
a.定义结构体数组:和定义结构体变量方法相仿,只需说明其为数组即可。
b.结构体数组的初始化:结构体数组初始化的一般形式是在定义数组的后面加上: = {初值表列};
c.结构体数组应用举列:(略过)
6.指向结构体类型数据的指针:
a.指向结构体变量的指针:以下三种形式等价:A.结构体变量。成员名 B.(*p).成员名 C. P->成员名 其中"->"称为指向运算符。
b.指向结构体数组的指针:可以使用指向数组或数组元素的指针和指针变量。同样,对结构体数组及其元素也可以用指针或指针变量来指向。
注意以下两点:A.如果p的初值指向第一个元素,则p加1后p就指向下一个元素的其始地址。B.程序已定义了p是一个指向struct student类型数据的指针变量,它用来指向一个struct student型的数据的起始地址,不应用来指向stu数组元素中的某一成员。
c.用结构体变量和指向结构体的指针做函数参数:将一个结构体变量的值传递给另一个函数有如下三种方法:
A.用结构体变量成员作参数。用法和普通变量做实参是一样的,属于“值传递”方式。注意实参与形参的类型保持一致。
B.用结构体变量做实参。用结构体变量作实参时,采取的是“值传递”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。形参业必须是同类型的结构体变量。(形参可变性小,一般较少使用。)
C.用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址传给形参。