C语言(结构体)

结构体的定义

        自定义数据类型的一种,关键字struct,结构体类型的变量可以存储多个不同数据类型的数据

struct 结构体名
{
    数据类型1 成员名称1;
    数据类型2 成员名称2;
};

格式说明:

        结构体名:单词首字母大写

        数据类型n:C语言支持的所有类型

        成员名称:合法的标识符

        数据类型n 成员名称n:类似于定义变量,定义了结构体中的成员

注意:

        结构体在定义的时候,成员不能赋值

常见的定义格式

        方式1:常规定义(命名结构体,只定义类型)

struct Student
{
    int num;
    char name[20];
};

        方式2:定义匿名结构体(常用于作为其他结构体的成员使用)

struct Dog
{
    chat *name;
    int age;
    struct
    {
        int year;
        int month;
    }birthday;
};

注意:定义匿名结构体的同时必须定义结构体变量,否则错误,结构体可以作为另一个结构体的成员

        总结:

                1、结构体可以定义在局部和全局位置

                2、全局位置和局部位置的结构体名可以相同,就近原则(和普通变量的定义同理)

结构体类型的使用:

        利用结构体类型定义变量,定义数组;结构体类型的使用与基本数据类型的使用类似

结构体变量的定义:

        三种形式定义结构体变量:

                第一种:

                先定义结构体

                然后使用struct 结构体名 变量名;

struct A 
{
    int a;
    char b;
}
struct A x;

                第二种

                在定义结构体的同时,定义结构体变量

struct A
{
    int a;
    char b;
}x,y;
struct A z;

                第三种:

                在定义匿名结构体的同时,定义结构体变量;

struct 
{
    int a;
    chat b;
}x,y;

        此时定义了一个没有名字的结构体(成为匿名结构体);y,x是这个匿名结构体类型的变量

应用场景:

        当结构体的类型只需要使用一次,并且定义类型的同时定义变量

        作为其他结构体的成员使用

定义结构体的同时,定义结构体变量初始化

struct Cat
{
    int age;
    char colot[20];
}cat;

        结构体成员部分初始化时,大括号不能省略

        结构体的成员,没有默认值,是不确定的数

结构体变量的使用

        结构体变量访问结构体成员

        格式

结构体变量名.成员名;

                可以通过访问给成员赋值

                通过访问获取成员的值

        结构体变量未初始化,结构体的成员值随机

结构体变量在定义时,可以初始化

        建议用大括号表明数据的范围

        结构体成员初始化时,可以部分初始化,部分初始化时一定要带大括号表明数据的范围

//结构体变量的初始化
#include <stdio.h>

struct Dog
{
    char *name;
    int age;
    char sex;
}
//先定义再初始化
void fun1()
{
    //定义结构体变量
    struct Dog dog;

    //给结构体变量的成员赋值
    dog.name = "旺财";
    dog.age = 5;

    //访问结构体变量的成员
    printf("%s,%d,%c\n",dog.name,dog.age,dog.sex);
}
//定义的同时初始化
void fun2()
{
    //定义结构体变量并初始化
    struct Dog dog = {"找",23,'m'};

    //访问结构体变量的成员
    printf("%s,%d,%c\n",dog.name,dog.age,dog.sex);
}
int main()
{
    fun1();
    fun2();
    return 0;
}

当需要管理多个学生对象,就需要一个结构体的数组

struct Student students[62];

三种形式定义结构体数组

        第一种:先定义结构体类型,然后定义结构体变量,再将变量存储到结构体数组中

//定义一个学生类型的结构体
struct Student
{
    char *name;
    int age;
    float scores[3];
}
//定义结构体对象
struct Student zhangsan = {"zhangsan",23,{2,3,56.6}};
struct Student lisi = {"lisi",24,{22,33,56.6}};

//定义结构化数组
struct Student student[3] = {zhangsan,lisi};

        第二种:定义结构体类型,然后定义结构体数组并初始化

//定义一个学生类型的结构体
struct student
{
    int id;
    char *name;
    float scores[3];
};
//定义结构体数组并初始化
struct Student student[3] = {
    {1,"zhnagsan",23,{99,98,99.0}},
    {2,"lisi",24,{99,98,99.0}}
};

        第三种:定义结构体类型同时定义结构体数组并初始化

//定义一个学生类型的结构体
struct Student
{
    int id;
    char *name;    
    int age;
    float scores[3];
}students[3] = {
    {1,"zhnagsan",23,{99,98,99.0}},
    {2,"lisi",24,{99,98,99.0}}
};

        第四种:定义结构体类型同时定义结构体数组,然后通过索引给结构体成员赋值

//定义一个学生类型的结构体
struct Student
{
    int id;
    char *name;    
    int age;
    float scores[3];
}sts[3];
sts[0].id = 1;
sts[0].name = "zhangsan";
sts[0].age = 12;
sts[0].scores[0] = 98;

结构体数组名访问结构体成员格式:结构体数组名->成员名

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值