• 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】

  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/xiu619544553/p/5325923.html
Copyright © 2020-2023  润新知