结构体

155 阅读2分钟

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。

怎样使用结构体变量

赋值和初始化
# include<stdio.h>
struct Student
{
    int age;
    float score;
    char sex;
};

int main(void)
{
    struct Student st1 = {1,5.5,'A'};
    struct Student st2;
    st2.age = 10;
    st2.score = 66;
    st2.sex = 'A';
    
    printf("%d %f %c\n",st1.age,st1.score,st1.sex);
    printf("%d %f %c\n",st2.age,st2.score,st2.sex);
}

该代码中的第一段只是定义了一个新的数据类型,并没有定义变量!

定义的同时可以整体赋初值
如果定义完之后,则只能单个的赋初值
struct Student * pst = &st1;//&st不能改成st
pst->age = 20;//在计算机内部会被转化成(* pat).age,也等价于st.age。
而我们之所以知道pst->age等价于st.age,是因为pst->age是被转化成了(* pst).age来执行

如何去除结构体变量中的每一个成员

1.结构体变量名.成员名
2.指针变量名->成员名//在计算机内部会被转化成(* 指针变量名).成员名的方式来执行。
所以说这两种方式是等价的。
3.pst->age的含义:pst所指向的那个结构体变量中的age这个成员。

结构体变量和结构体变量指针作为函数参数传递的问题

推荐使用结构体变量作为函数参数传递的问题

结构体变量的运算

结构体变量不能相加,不能相减,也不能相互乘除,但结构体变量可以相互赋值。
例子:
结构体变量输入:InputStudent(&st);
结构体变量输出:OutputStudent(st);

image.png 指针的优点之一:

快速的传递数据,耗用内存小,执行速度快。

举例

    冒泡排序
    
    void sort(int * pArr,int len)
    {
        int i,j,t;
        for(i = 0;i<len-1;i++)
        {
            for(j = 0;j<len-1-i;j++)
            {
                if(a[j]>a[j+1])
                {
                    t = a[j];
                    a[j] = a[j+1];
                    a[j+1] = t;
                }
            }
        }
    }
    
    int main(void)
    {
        int a[6] = {2,6,9,-8,0,-3};
        int i = 0;
        
        sort(a,6);
        for(i = 0;i<6;i++)
        {
            printf("%d",a[i]);
        }
        printf("\n");

return 0;
    }

动态构造存放学生信息的结构体数组 动态构造一个数组,存放学生信息 然后按分数排序输出 枚举: 什么是枚举

    把一个事物所有可能的取值一一列举出来

怎样使用枚举

image.png

image.png 枚举优缺点

代码更安全,书写麻烦