• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

一、C语言结构体数组

武飞扬头像
外太空程序员
帮助1

  1.  
    1、如何定义结构体数组
  2.  
    a) 单独写成一行来定义
  3.  
    struct student stu[3]; //可以用的下标是 stu[0]--- stu[2]
  4.  
     
  5.  
    //定义结构体数组的时候还可以同时进行初始化
  6.  
    struct student stu[ ]={ { },{ },{ } };
  7.  
    struct student stu[3] = {
  8.  
    {1001,"张三",1,18,"1栋1单元",12,30,2000},
  9.  
    {1002,"李四",1,20,"2栋2单元",11,15,1998},
  10.  
    {1003,"王五",1,22,"3栋3单元",10,15,1996}
  11.  
    };
  12.  
    b) 定义结构体的时候顺便就定义结构体数组
  1.  
    struct student
  2.  
    {
  3.  
    int num;
  4.  
    char name[100];
  5.  
    int sex;
  6.  
    int age;
  7.  
    char address[100];
  8.  
    struct date birthday;
  9.  
    }stu[3];
  1.  
    //演示指向结构体变量的指针
  2.  
    #include<stdio.h>
  3.  
     
  4.  
    struct date
  5.  
    {
  6.  
    int month;
  7.  
    int day;
  8.  
    int year;
  9.  
    };
  10.  
     
  11.  
    struct student //定义一个结构体类型
  12.  
    {
  13.  
    int num; //学号
  14.  
    char name[100]; //姓名
  15.  
    int sex; //性别:0 女 , 1 男
  16.  
    int age; //年龄
  17.  
    char address[100]; //地址
  18.  
    struct date birthday; //生日 结构体类型的变量
  19.  
    }s1,s2;
  20.  
    int main()
  21.  
    {
  22.  
    struct student stu[3] = {
  23.  
    {1001,"张三",1,18,"1栋1单元",12,30,2000}, //stu[0]
  24.  
    {1002,"李四",1,20,"2栋2单元",11,15,1998}, //stu[1]
  25.  
    {1003,"王五",1,22,"3栋3单元",10,15,1996} //stu[2]
  26.  
    };
  27.  
    stu[1].age ; //李四的年龄 1
  28.  
    printf("name=%s\n",stu[1].name);
  29.  
    printf("age=%d\n",stu[1].age);
  30.  
     
  31.  
     
  32.  
    return 0;
  33.  
    }
学新通

学新通

二、结构体指针

              结构体指针就是结构体变量的指针,这个指针肯定是指向该结构体变量所占据的内存段的起始地址。

             当然,结构体变量指针 也可以指向结构体数组中的元素,因为结构体数组中的每个元素它就相当于一个结构体变量;

    //现在,ps就指向了stu,stu里面内容若发生改变了,就等于ps所指向的内容发生改变。

    //如何通过结构体变量的指针来访问结构体变量的成员呢?有两种方法:

  1.  
        (*ps).age=29;   //*ps 等价于 stu,这里加了括号是因为优先级问题,*不如 . 的优先级高
  2.  
     
  3.  
        ps->sex=1;      //其中这个 -> 叫 指向结构体成员运算符,优先级是最高的
  1.  
    #include<stdio.h>
  2.  
    #include<string.h> //字符串拷贝命令
  3.  
    struct date
  4.  
    {
  5.  
    int month;
  6.  
    int day;
  7.  
    int year;
  8.  
    };
  9.  
     
  10.  
     
  11.  
     
  12.  
     
  13.  
    struct student //定义一个结构体类型
  14.  
    {
  15.  
    int num; //学号
  16.  
    char name[100]; //姓名
  17.  
    int sex; //性别:0 女 , 1 男
  18.  
    int age; //年龄
  19.  
    char address[100]; //地址
  20.  
    struct date birthday; //生日 结构体类型的变量
  21.  
    }s1,s2;
  22.  
    int main()
  23.  
    {
  24.  
    struct student stu; //定义一个结构体变量
  25.  
    struct student *ps; //定义一个结构体变量的指针
  26.  
    ps=&stu;
  27.  
    strcpy(stu.name,"小虎");
  28.  
    stu.age=16;
  29.  
     
  30.  
     
  31.  
    //现在,ps就指向了stu,stu里面内容若发生改变了,就等于ps所指向的内容发生改变。
  32.  
    //如何通过结构体变量的指针来访问结构体变量的成员呢?有两种方法:
  33.  
    (*ps).age=29; //*ps 等价于 stu,这里加了括号是因为优先级问题,*不如 . 的优先级高
  34.  
    ps->sex=1; //其中这个 -> 叫 指向结构体成员运算符,优先级是最高的
  35.  
    ps->num=1001;
  36.  
    printf("name=%s\n",ps->name);
  37.  
    printf("age=%d\n",ps->age);
  38.  
    printf("num=%d\n",(*ps).num);
  39.  
    printf("sex=%d\n",stu.sex);
  40.  
     
  41.  
     
  42.  
     
  43.  
     
  44.  
    return 0;
  45.  
    }
学新通

学新通

  1.  
    //演示指向结构体数组的指针
  2.  
    #include<stdio.h>
  3.  
    struct date
  4.  
    {
  5.  
    int month;
  6.  
    int day;
  7.  
    int year;
  8.  
    };
  9.  
     
  10.  
    struct student //定义一个结构体类型
  11.  
    {
  12.  
    int num; //学号
  13.  
    char name[100]; //姓名
  14.  
    int sex; //性别:0 女 , 1 男
  15.  
    int age; //年龄
  16.  
    char address[100]; //地址
  17.  
    struct date birthday; //生日 结构体类型的变量
  18.  
    }s1,s2;
  19.  
    int main()
  20.  
    {
  21.  
    struct student stu[3] = {
  22.  
    {1001,"张三",1,18,"1栋1单元",12,30,2000}, //stu[0]
  23.  
    {1002,"李四",1,20,"2栋2单元",11,15,1998}, //stu[1]
  24.  
    {1003,"王五",1,22,"3栋3单元",10,15,1996} //stu[2]
  25.  
    };
  26.  
     
  27.  
    struct student *ps;
  28.  
    ps=stu; //数组名字代表数组首地址。数组中数据在内存中都是挨着的;
  29.  
    for(int i=0;i<3;i )
  30.  
    {
  31.  
    printf("num=%d\n",ps->num);
  32.  
    printf("name=%s\n",ps->name);
  33.  
    printf("age=%d\n",ps->age);
  34.  
     
  35.  
     
  36.  
    ps ; //数组第一地址表示张三, 后就是李四的地址,再 后就是王五的地址;从张三跳跃到李四
  37.  
    //意味着ps指向了下一个数组元素的开始地址
  38.  
    printf("----------------------------------\n");
  39.  
     
  40.  
    }
  41.  
     
  42.  
    return 0;
  43.  
    }
学新通

 学新通

  1.  
    说明:
  2.  
    ( ps)->num; // 在前面表示先加后用,所以表示的是李四
  1.  
    #include<stdio.h>
  2.  
    #include<string.h> //字符串拷贝命令
  3.  
    struct date
  4.  
    {
  5.  
    int month;
  6.  
    int day;
  7.  
    int year;
  8.  
    };
  9.  
     
  10.  
     
  11.  
     
  12.  
     
  13.  
    struct student //定义一个结构体类型
  14.  
    {
  15.  
    int num; //学号
  16.  
    char name[100]; //姓名
  17.  
    int sex; //性别:0 女 , 1 男
  18.  
    int age; //年龄
  19.  
    char address[100]; //地址
  20.  
    struct date birthday; //生日 结构体类型的变量
  21.  
    }s1,s2;
  22.  
    int main()
  23.  
    {
  24.  
     
  25.  
    struct student stu[3] = {
  26.  
    {1001,"张三",1,18,"1栋1单元",12,30,2000}, //stu[0]
  27.  
    {1002,"李四",1,20,"2栋2单元",11,15,1998}, //stu[1]
  28.  
    {1003,"王五",1,22,"3栋3单元",10,15,1996} //stu[2]
  29.  
    };
  30.  
     
  31.  
     
  32.  
    //演示指向结构体数组的指针
  33.  
    struct student *ps;
  34.  
    ps=stu; //数组名字代表数组首地址。数组中数据在内存中都是挨着的;
  35.  
     
  36.  
    printf("%s\n",( ps)->name); // 在前面表示是:先加后用
  37.  
     
  38.  
     
  39.  
     
  40.  
     
  41.  
    return 0;
  42.  
    }
学新通

学新通

  1.  
    #include<stdio.h>
  2.  
    #include<string.h> //字符串拷贝命令
  3.  
    struct date
  4.  
    {
  5.  
    int month;
  6.  
    int day;
  7.  
    int year;
  8.  
    };
  9.  
     
  10.  
     
  11.  
     
  12.  
     
  13.  
    struct student //定义一个结构体类型
  14.  
    {
  15.  
    int num; //学号
  16.  
    char name[100]; //姓名
  17.  
    int sex; //性别:0 女 , 1 男
  18.  
    int age; //年龄
  19.  
    char address[100]; //地址
  20.  
    struct date birthday; //生日 结构体类型的变量
  21.  
    }s1,s2;
  22.  
    int main()
  23.  
    {
  24.  
     
  25.  
     
  26.  
    struct student stu[3] = {
  27.  
    {1001,"张三",1,18,"1栋1单元",12,30,2000}, //stu[0]
  28.  
    {1002,"李四",1,20,"2栋2单元",11,15,1998}, //stu[1]
  29.  
    {1003,"王五",1,22,"3栋3单元",10,15,1996} //stu[2]
  30.  
    };
  31.  
     
  32.  
     
  33.  
    //演示指向结构体数组的指针
  34.  
    struct student *ps;
  35.  
    ps=stu; //数组名字代表数组首地址。数组中数据在内存中都是挨着的;
  36.  
     
  37.  
     
  38.  
     
  39.  
     
  40.  
    printf("%s\n",(ps )->name); // 在后面表示是:先用后加
  41.  
    printf("%s\n",ps->name); //因为上一行代码先加后用,所以在上一行代码的地址上 1
  42.  
     
  43.  
     
  44.  
     
  45.  
     
  46.  
     
  47.  
     
  48.  
    return 0;
  49.  
    }
学新通

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgggeeg
系列文章
更多 icon
同类精品
更多 icon
继续加载