1. 结构1.1 结构特性
结构是一种复合类型,和之前的数组类似。不同的是数组中的数据类型相同,而结构中的数据可以不同。正是因为数组中保存的数据相同,所以可以通过下标(索引)来访问,而结构则不能通过索引来访问。
1.2 结构变量的声明
结构可以把相关联的变量保存在一起,这样会很方便。例如,我们可以把一个人的信息定义在一个结构中,这些信息可能有姓名、年龄、性别、住址等。结构中的变量成为结构的成员。结构的定义格式如下:
struct{
   char *name;
   int age;
   char *email;
}person1,person2;
这里定义了一个结构有三个成员,person1和person2是该结构类型的变量。可以通过点操作符(.)访问变量。例如:
   person1.name = "tom";
   person1.age = 20;
   person1.email="tome@gmail.com";

   person2.name = "kite";
   person2.age = 30;
   person2.email = "kite@gmail.com";
1.3 结构变量的初始化
可以在定义结构的时候对其变量进行初始化,下列代码定义一个点Point结构,具有两个成员x、y坐标。
struct{
   int x;
   int y;
}point1 = {20,30},
point2 = {100,150};
可以通过点操作符访问结构成员。
printf("point1.x=%d\n",point1.x);
printf("point1.y=%d\n",point1.y);
1.4 结构类型
可以在定义结构时,给结构起一个名字,这样在后面就可以通过该名字,像定义int类型一样定义结构类型了。
struct person {
   int pid;
   char *name;
   int age;
};
struct person p1,p2;
p1.pid = 1;
p1.name = "tom";
p1.age = 20;
p2 = {2,"kite",30};
1.5 结构类型定义
可以通过使用typedef来定义结构类型,而不用再使用struct关键字
typedef struct person Person;
Person p1={1,"tom",20};
Person p2 = {2,"kite",30};
1.6 把结构类型作为函数的参数或返回值
例如,下面函数的参数和返回值都是一个结构类型。
struct person test(struct person p){
   p.pid = 2;
   p.name = "big tom";
   p.age = 21;
   return p;
}
测试代码:
struct person p = {1,"tom",20};
p = test(p);
printf("p.name=%s",p.name);
1.7 结构数组
结构数组是指结构中的元素是一个数组,可以使用结构数组来模拟一个简单的数据。例如,
struct person pers[] = {{1,"tom",20},{2,"kite",30},{3,"rose",40}};
1.8 结构的嵌套
结构的成员还可以是一个已经定义的结构,例如:
struct point {
   int x;
   int y;
};

struct rect {
   struct point p1;
   struct point p2;

};

该博客教程视频地址:http://geek99.com/node/1019

原文出处:http://geek99.com/node/876#