西交《程序设计基础》第七章 结构体与共同体
发布时间:2024-01-10 09:01:34浏览次数:49西交《程序设计基础》第七章 结构体与共同体(一)一、作为构造数据类型,结构体与共同体有哪些区别与联系?结构体和共同体是两种构造类型数据,是用户定义新数据类型的重要手段。结构体和共同体有很多的相似之处,它们都由成员组成。成员可以具有不同的数据类型。成员的表示方法相同。都可用三种方式作变量说明。可以说,共用体类型和结构体类型在定义形式、变量说明以及引用方式上都非常类似。其本质差别在于两者的存储方式不同。结构体变量的不同成员分别使用不同的内存空间,该变量所占内存空间的大小,为该变量各个成员所占内存空间大小的总和。共用体变量的各个成员都有相同的起始地址,该变量所占内存空间的大小为占用内存空间最大的那一个成员项的空间大小。结构变量可以作为函数参数,函数也可返回指向结构的指针变量,而共同体变量不能作为函数参数,函数也不能返回指向共同体的指针变量。但可以使用指向共同体变量的指针,也可使用共同体数组。二、结构体数组与数值数组有哪些不同?结构体数组与数值数组的不同指出在于,每一个数组元素都是一个结构体类型的数据,它们分别包括各个成员项。这种构造形式便于存放和处理一批类似于职工、学生等类型的数据,在程序设计中有广泛的应用。从存放的角度来看,结构体数组的存放与数值数组存放的方式是类似的,数组各元素在内存中连续存放。不同的是数值数组的每个元素存放的是一个数值,而结构体数组的每个元素存放的是一个结构体变量。赋值时,结构体数组初始化,要将每一个元素的初始数据分别用一对大括号括起来。如果给数组元素全部赋初值,数组元素个数可以省略不写。三、为什么要用指向结构体变量的指针作为函数参数?把一个完整的结构体变量作为参数来传递,虽然合法,但浪费时间和空间,系统开销比较大。如果结构体类型中的成员很多,或者有些成员是数组,则程序的运行效率会大大降低。因此,一般情况下,都用指向结构体变量的指针作为函数参数。用结构体变量指针作为被调用函数的形参,则从调用函数传递给被调用函数的是结构体变量的地址。这种传递方式,不必为被调用函数建立结构体类型的变量,且可利用指针运算,来访问指针指向的结构体变量中的各个成员,不仅方便,而且也可
以提高程序的运行效率。四、在 C 语言中,链表和数组有哪些区别?二者都属于一种数据结构。从逻辑结构来看:1) 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。2) 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据 next 指针找到下一个元素从内存存储来看:1) (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小2) 链表从堆中分配空间, 自由度大但是申请管理比较麻烦 3) 从上面的比较可以看出,如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;相反, 如果需要经常插入和删除元素就需要用链表数据结构了。