zoukankan      html  css  js  c++  java
  • c语言基础----结构体

    在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

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

    结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:

    struct stu{
        char *name;  //姓名  注意大括号后面的分号;不能少,这是一条完整的语句。
        int num;  //学号
        int age;  //年龄
        char group;  //所在学习小组
        float score;  //成绩
    };

    像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。

    成员的获取和赋值

    结构体使用点号.获取单个成员。获取结构体成员的一般格式为:结构体变量名.成员名;

    通过这种方式可以获取成员的值,也可以给成员赋值:

    int main(){
        struct{
            char *name;  //姓名
            int num;  //学号
            int age;  //年龄
            char group;  //所在小组
            float score;  //成绩
        } stu1;
    
        //给结构体成员赋值
        stu1.name = "Tom";
        stu1.num = 12;
        stu1.age = 18;
        stu1.group = 'A';
        stu1.score = 136.5;
    
        //读取结构体成员的值
        printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!
    ", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);

    除了可以对成员进行逐一赋值,也可以在定义时整体赋值,例如:

    struct{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组
        float score;  //成绩
    } stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };

    结构体数组

    在C语言中,定义结构体数组和定义结构体变量的方式类似,请看下面的例子:

    struct stu{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组 
        float score;  //成绩
    }class[5];

    结构体数组在定义的同时也可以初始化(当对数组中全部元素赋值时,也可不给出数组长度),例如:

    struct stu{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组 
        float score;  //成绩
    }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 的成绩:

    class[4].score;

    修改 Li ping 的学习小组:

    class[0].group = 'B';

    结构体指针

    当一个指针变量指向结构体时,我们就称它为结构体指针

    struct 结构体名 *变量名;

    在定义结构体的同时定义结构体指针:

    struct stu{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组
        float score;  //成绩
    } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pointer= &stu1;

    结构体指针可以获取结构体成员:

    (*pointer).name
    // 或者
    pointer->name

    第一种写法中,.的优先级高于*(*pointer)两边的括号不能少。如果去掉括号写作*pointer.memberName,那么就等效于*(pointer.memberName),这样意义就完全不对了。
    第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。

  • 相关阅读:
    STL标准函数库学习小总结
    3 种生成高强度密码的方法
    树莓派使用 OLED 屏显示图片及文字
    一个骚命令防止你的文件被误删除!
    B站,首战告捷!
    10 个提高效率的 Linux 命令别名
    Vim的三款实用插件
    如何高效回退到特定层级目录?
    如何将目录下的脚本一次性全部执行
    数据结构|数组为什么这么快?
  • 原文地址:https://www.cnblogs.com/xuey/p/12205673.html
Copyright © 2011-2022 走看看