• C语言结构体和共用体_07


    • 概述
    • 定义结构体类型变量的方法
    • 结构体变量的引用
    • 结构体变量的初始化
    • 结构体数组
    • 指向结构体类型数据的指针
    • 用指针处理链表
    • 共用体
    • 枚举类型
    • 用 typedef定义类型

     概述

    定义一个结构体的一般形式:

    struct 结构名 {
            成员列表
    };

    一个结构体有一个结构名,但不是必须的。成员列表有若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为: 类型说明符 成员名;

    例如:

        // 学号、姓名、性别、年龄、地址等属性
        struct Student {
            int num;
            char name[20];
            char sex;
            int age;
            char addr[30];
    };

    定义结构体类型变量的方法

    在定义了结构体变量后,系统会位置分配内存单元。

    可以采用三种方法定义结构体类型变量:

    1)先声明结构体类型再定义变量名;

    struct Student person1;
    struct Student person2;

    则,person1、person2 具有struct Student类型的结构。

    2)在声明类型的同时定义变量

    struct Student {
            int num;
            char name[20];
            char sex;
            int age;
            char addr[30];
    } student1, student2;

    3)直接定义结构体类型变量,即不出现结构体名

    struct {
            int num;
            char name[20];
            char sex;
            int age;
            char addr[30];
    } student1;

    结构体可以嵌套:例如:

    struct date {
            int month;
            int day;
            int year;
    };
        
        struct Student {
            int num;
            char name[20];
            char sex;
            int age;
            char addr[30];
            struct date birthday; // date结构体
    };

    结构体变量的引用

    在定义了结构体变量以后,若要引用这个变量,必须遵守以下规则:

    1)不能将一个结构体变量作为一个整体进行输入和输出。

    正确引用方法:结构体变量名.成员名 

    示例:

    printf("
    %d
    %s
    %c
    %d
    %d
    %d
    %.2f
    ", student1.num, student1.name, student1.sex, student1.birthday.year, student1.birthday.month, student1.birthday.day, student1.score);
    student1.num = 100;

    "."是成员(分量)运算符,它在所有的运算符中优先级最高。因此可以把student1.num等作为一个整体来看待。上面赋值语句的作用是将整数100赋给student1变量中的成员num。

    struct Student student1 = {21, "Kingdev", 'f', {2016, 3, 28}, 90.f};
    struct Student student2 = {10, "Learning", 'm', {2010, 10, 10}, 80.f};
    student1 = student2; // 整体赋值
    printf("
    %d
    %s
    %c
    %d
    %d
    %d
    %.2f
    ", student1.num, student1.name, student1.sex, student1.birthday.year, student1.birthday.month, student1.birthday.day, student1.score);

    打印出的结果为变量 student2 的值。

    2)如果成员本身又属于一个结构体类型,则要用若干个成员运算符一级一级的找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。如:

    student1.birthday.year, student1.birthday.month, student1.birthday.day

    3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)

    如:

    // 计算两位学生的分数和
    float sum = student1.score + student2.score;

    4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址;

    结构体地址和结构体第一个元素地址是一致的。结构体变量的地址主要用作函数的参数,传递结构体变量的地址。

        printf("student1 Address   - %p
    ", &student1);
        printf("student1 first Ele - %p
    ", &student1.num);
        // 打印结果
        student1 Address   - 0x7fff5fbff7b0
        student1 first Ele - 0x7fff5fbff7b0

    结构体变量的初始化

    尊重作者劳动成果,转载请注明: 【kingdev】

  • 相关阅读:
    Android中颜色的使用
    Android中android:layout_weight的使用方法
    Android中android:layout_gravity和android:gravity的使用方法
    Android中的尺寸单位
    一个小demo
    新版markdown解析工具
    LoadShader辅助函数
    github 博客地址
    不一样的快速排序
    C++ 重构 markdown–> HTML 的引擎
  • 原文地址:https://www.cnblogs.com/xiu619544553/p/5325923.html
Copyright © 2020-2023  润新知