1.定义的基本结构
struct Name { //一些基本的数据结构或者自定义的数据类型 };
2.可以使用的形式
struct studentInfo { ..... }Alice,Bob,stu[1000];
注:结构体里面能定义除了自身(这样会引起循环定义的问题)之外的任何数据类型。不过虽然不能定义本身,但可以定义自身类型的指针变量。
struct node { struct node n; //不能定义node型变量 struct node *next; //可以定义node*型指针变量 };
3.访问结构体内元素
例形式如下的结构体
struct studentInfo{ int id; char name[20]; studentInfo *next; }stu,*p;
则访问的形式如下:
访问stu变量的写法: stu.id stu.name stu.next 访问指针变量p中元素的写法: (*p).id (*p).name (*p).next 结构体指针变量内元素的访问只需要使用“->”跟上要访问的元素即可,两者等价 p->id p->name p->next
4.结构体的初始化
4.1 单个赋值
如:stu.id=1
4.2 struct 结构体名 变量名={初始数据表};
4.3 “构造函数”的方法
直接定义在函数体内,不需要写返回类型,且函数名与结构体名相同
4.3.1 默认构造函数,形式如下
struct studentInfo{ int id; char gender; studentInfo(){} //默认生成的构造函数 };
4.3.2手动初始化参数
struct studentInfo{ int id; char gender; //下面的参数用以对结构体内部变量进行赋值 studentInfo(int _id,int _gender){ id=_id; gender=_gender; } }; //或简化的形式 struct studentInfo{ int id; char gender; studentInfo(int _id,int _gender):id(_id),gender(_gender) {} };
赋值方法:studentInfo stu=studentInfo(10086,'M');
5.结构体数组
所谓结构体数组,是指数组中的每个元素都是一个结构体,举例如下:
struct translation { int code; char *desc; }; struct translation t1[] = { {1, "translation1"}, {2, "translation2"}, {3, "translation3"}, {0, NULL} //手动添加结束标志,防止超出 }; struct translation t2[] = { {9, "translation9"}, {8, "translation8"}, {7, "translation7"}, {0, NULL} //同上 };
在main文件中调用时的方法
1 extern struct translation t1[]; 2 extern struct translation t2[]; 3 4 //遍历translation类型所有结构体数组的方法 5 struct translation *translations[] = { 6 t1, 7 t2, 8 NULL 9 }; 10 11 //调用举例 12 static char *search_desc(int errcode) 13 { 14 int i = 0; 15 struct translation *error; 16 while (NULL != translations[i]) { 17 error = &(translations[i++][0]); 18 while (NULL != error->desc) { 19 if (errcode == error->errorcode) 20 goto __exit; 21 error++; 22 } 23 } 24 __exit: 25 return error->desc; 26 }