nanzh

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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 }

 

posted on 2017-12-12 15:11  深海里的星星nanzh  阅读(312)  评论(0编辑  收藏  举报