C程序设计语言整理笔记(六)结构

来源:互联网 发布:linux查看dns 编辑:程序博客网 时间:2024/06/09 19:54

1.    结构的基本知识

Ø 结构是一个或多个变量的集合,这些变量可能为不同的类型,为了处理的方便而将这些变量组织在一个名字之下

Ø 结构可以拷贝、赋值、传递给函数,函数也可以返回结构类型的返回值

Ø 

struct point

{

     int x;

     int y;

};

关键字struct引入结构声明:

struct结构标记

{

     一系列声明

};                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø struct声明定义了一种数据类型

struct {...} x, y;从语法角度来说,与声明int x, y;具有相似的意义

Ø 如果结构声明的后面不带变量表,则不需要为它分配存储空间,它仅仅描述了一个结构的模版或轮廓。但是,如果结构声明中带有标记,那么在以后定义结构实例时便可以使用该标记定义

Ø 在表达式中,可以通过下列形式引用某个特定结构中的成员:

结构名.成员

Ø 结构可以嵌套

struct rectangular {

     struct point pt1;

     struct point pt2;

};

struct rectangular rect;

通过语句rect.pt1.x引用rect的成员pt1x坐标

 

2.    结构与函数

Ø 结构的合法操作:

1)    作为一个整体复制和赋值

2)    通过&运算符取地址

3)    访问其成员

          复制和赋值包括向函数传递参数以及从函数返回值;结构之间不可以进行比较;可以用一个常量成员值列表初始化结构,自动结构也可以通过赋值进行初始化

 

Ø 传递结构的方法

1)    分别传递各个结构成员:

          struct point makepoint(int x, int y)

          {

                struct point temp;

                temp.x = x;

                temp.y = y;

                return temp;

          }

          参数名和结构成员同名不会引起冲突,事实上,使用重名可以强调两者之间的关系

 

2)    传递整个结构

          # define    min(a, b)    ((a) < (b) ? (a) : (b))

          # define    max(a, b)   ((a) > (b) ? (a) : (b))

          struct rectangular canonrect(struct rectangular rect) //将矩形坐标规范化

          {

                struct rectangular temp;

                temp.pt1.x = min(rect.pt1.x, r.pt2.x);

                temp.pt1.y = min(rect.pt1.y, r.pt2.y);

                temp.pt2.x = max(rect.pt1.x, r.pt2.x);

                temp.pt2.y = max(rect.pt1.y, r.pt2.y);

                return temp;

          }

          函数的参数和返回值都是结构类型。结构类型的参数和其他类型的参数一样,都是通过值传递

 

3)    传递指向结构的指针

          如果传递给函数的结构很大,使用指针方式的效率比复制整个结构的效率要高

Ø struct point *pt;

                (*pt).x中的圆括号是必须的

Ø *pt是一个指向结构的指针

pt ->结构成员的方式引用相应的结构成员