zoukankan      html  css  js  c++  java
  • C语言-数据结构-结构体

    一、结构体的定义

    数组(Array)是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。

    结构体(Struct)可以来存放一组不同类型的数据。其是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

    结构体的定义形式为:

    struct 结构体名{
        结构体所包含的变量或数组
    };

    例如:

    struct stu{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在学习小组
    };

    定义结构体变量:

    struct stu stu1,stu2;

     或者在定义结构体的同时定义变量:

    struct stu{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在学习小组
    }stu1,stu2;

     常用的是利用typedefstruct stu取别名:

    typedef struct stu{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在学习小组
    }student;
    student stu1, stu2;

    给结构体变量赋值:

        stu1.name = "Tom";
        stu1.num = 12;
        stu1.age = 18;
        stu1.group = 'A';
        stu1.score = 136.5;

    二、结构体数组的定义

    //赋值
    struct
    stu stu1[5]; //或student stu1[5];
    //赋值
    class[5] = { {"Li ping", 5, 18, 'C', 145.0}, {"Zhang ping", 4, 19, 'A', 130.5}, {"He fang", 1, 18, 'A', 148.5}, {"Cheng ling", 2, 17, 'F', 139.0}, {"Wang ming", 3, 17, 'B', 144.5} }

    结构体数组的使用,例如,

    获取 Wang ming 的成绩:stu1[4].score; 

    修改 Li ping 的学习小组:class[0].group = 'B';

    三、结构体指针

    当一个指针变量指向结构体时,我们就称它为结构体指针。C语言结构体指针的定义形式一般为:

    struct 结构体名 *变量名;

    注意,结构体变量名数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&,所以给 pstu 赋值只能写作:

    struct stu *pstu = &stu1;

    获取结构体成员:.的优先级高于*(*pointer)两边的括号不能少。

    (*pointer).memberName

    或:->是一个新的运算符,可以通过结构体指针直接取得结构体成员;

    pointer->memberName

    结构体指针作为函数参数:

    结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速。

    注意:结构体数组指针的使用(结构体数组变量名前不需要加&

    #include <stdio.h>
    
    struct stu{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组
        float score;  //成绩
    }stus[] = {
        {"Zhou ping", 5, 18, 'C', 145.0},
        {"Zhang ping", 4, 19, 'A', 130.5},
        {"Liu fang", 1, 18, 'A', 148.5},
        {"Cheng ling", 2, 17, 'F', 139.0},
        {"Wang ming", 3, 17, 'B', 144.5}
    }, *ps;
    
    int main(){
        //求数组长度
        int len = sizeof(stus) / sizeof(struct stu);
        printf("Name		Num	Age	Group	Score	
    ");
        for(ps=stus; ps<stus+len; ps++){
            printf("%s	%d	%d	%c	%.1f
    ", ps->name, ps->num, ps->age, ps->group, ps->score);
        }
    
        return 0;
    }
  • 相关阅读:
    Linux任务调度
    用户管理——用户和用户组
    Linux实用指令
    spring模拟ioc
    浅谈log4j-3-不同输出样式
    浅谈log4j-2
    浅谈log4j
    windows下安装kibana
    【PHP】 解决报错:Error: php71w-common conflicts with php-common-5.4.16-43.el7_4.x86_64
    mysql 8.0设置日期为0000-00-00 00:00:00时报错
  • 原文地址:https://www.cnblogs.com/lemonzhang/p/12301971.html
Copyright © 2011-2022 走看看