结构【重学C之六】

来源:互联网 发布:电路板设计软件下载 编辑:程序博客网 时间:2024/05/20 14:19

结构是一个或多个变量的集合,这些变量可能为不同的类型(区别于数组),为了处理的方便而将这些变量组织在一个名字之下。它也被称之为结构体,是C语言提供的一种定义自定义数据类型的方式。结构体给了程序员自行实现自己所需要数据结构的能力。ANSI定义了结构的赋值操作——结构可以拷贝、赋值、传递给函数,函数也可以返回结构类型的返回值。
结构的声明是通过struct关键字来实现的,比较常见的一个例子是二维坐标系中坐标点的例子,一个坐标点包含两个变量,这两个变量可以定义在一个结构体中,那么这个结构体就可以表示一个二维平面上的点,结构体的声明如下:

struct point {    int x;    int y;};

仅仅声明结构体是不分配内存空间的,它只是定义了一个概念上的东西。如果要让一个结构体在内存中分配空间,则必须定义它,定义结构体的方式和定义普通变量的方式是一样的,都是通过变量类型,变量名来定义的,定义的示例如下:

struct point pt;

也可以通过typedef来简化定义:

typedef struct point {    int x;    int y;}point;point pt;

结构体与函数

结构体的合法操作只有几种:作为一个整体赋值和复制,通过&运算符取地址,访问其成员。当结构体作为参数传入其他函数中,它和其他类型的变量是一样的,都是通过值传递的。也就是说,当把结构体传入到函数中时,被传入函数中会创建一个此结构体的拷贝。如果传入的结构体很大,使用指针的方式效率会比较高,因为这样就不用复制整个结构体中的成员。

结构数组

以结构体作为成员的数组就是结构数组,也叫结构体数组。结构数组的声明如下:

struct key {    char *word;    int count;};sturct key keytab[NKES];

联合

联合是可以(在不同时刻)保存不同类型和长度的对象的变量,编译器负责跟踪对象的长度和对齐要求。联合的定义如下:

union u_tag {    int ival;    float fval;    char *sval;} u;

位字段

位字段和联合一样现在也极少被使用了。

0 0
原创粉丝点击