C-11 结构体

结构体是一种自定义的数据类型,它将不同的变量、数据类型和数组聚集到一个单独的单元中。

结构体可以让我们去描述复杂对象。例如,结构体可以用于存储学生的姓名、年龄、成绩等信息。再比如,结构体可以用于存储一本书的书名,作者,出版社等信息

=========================================================================

结构体的创建和初始化

无论是上面举例提到的学生亦或是书籍在C语言中都没有相应的类型与之对应,而我们就可以借助结构体去创建一个新的类型出来。

//创建一个学生类型
struct Student
{
    char name[20];
    int age;
    double score;
};

//创建一个书的类型
struct Book
{
    char name[20];
    float price;
    char id[30];
};

如上所示,这样我们就创建出了一个新的类型。

​
//创建一个学生类型
struct Student
{
    char name[20];
    int age;
    double score;
};

//创建一个书的类型
struct Book
{
    char name[20];
    float price;
    char id[30];
};

​int main()
{
    struct Student s = {"张三",20,85.5};
    //结构体的初始化

    return 0;
}

这时就将名字,年龄,分数等信息赋给了 s ,这时也就完成了结构体的初始化

---------------------------------------------------------------------------------------------------------------------------------

操作符 .

​
//创建一个学生类型
struct Student
{
    char name[20];
    int age;
    double score;
};

//创建一个书的类型
struct Book
{
    char name[20];
    float price;
    char id[30];
};

​int main()
{
    struct Student s = {"张三",20,85.5};
    //结构体的初始化

    return 0;
}

还是以这段代码举例,其中结构体中的 name、price、id、age、score 这些都是结构体变量。而在结构体的初始化中的 s 则称为成员变量 。

​
//创建一个学生类型
struct Student
{
    char name[20];
    int age;
    double score;
};


​int main()
{
    struct Student s = {"张三",20,85.5};
    //结构体的初始化

    printf("%s %d %lf\n" , s.name , s.age , s.score);

    return 0;
}

这时如果想打印结构体成员 s  ,就需要借助操作符 . 

作用是找到这个结构体的成员访问他的成员变量。用法就是结构体变量.成员变量

---------------------------------------------------------------------------------------------------------------------------------

操作符 ->

除了上面展示的方法打印,还可以运用上次写到的指针来打印。

​
//创建一个学生类型
struct Student
{
    char name[20];
    int age;
    double score;
};


​int main()
{
    struct Student s = {"张三",20,85.5};
    //结构体的初始化

    printf("1:%s %d %lf\n" , s.name , s.age , s.score);

    struct Student * pa = &s;
    printf("2:%s %d %lf\n" , (*pa).name , (*pa).age , (*pa).score);


    return 0;
}

 这样就是借助指针,找到结构体变量的位置,然后使用 . 操作符再次打印。

当然这样还是太繁琐了,不够直观。

​
//创建一个学生类型
struct Student
{
    char name[20];
    int age;
    double score;
};


​int main()
{
    struct Student s = {"张三",20,85.5};
    //结构体的初始化

    printf("1:%s %d %lf\n" , s.name , s.age , s.score);

    struct Student * pa = &s;
    printf("2:%s %d %lf\n" , (*pa).name , (*pa).age , (*pa).score);

    printf("3:%s %d %lf\n" , ps->name , ps->age , ps->score);

    return 0;
}

第三种写法就等价于第二种写法,不过更加直观。先通过 ps 先找到他 . 的对象 ,然后再找到他成员里的变量。总结一下就是结构体指针->成员变量名

而这三种方法打印出的结果都是完全相同。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值