当前位置:首页 » 《我的小黑屋》 » 正文

C语言——结构体类型(一)【结构体定义,创建,初始化和引用】

24 人参与  2024年05月03日 17:40  分类 : 《我的小黑屋》  评论

点击全文阅读


?前言:
在实际编程过程中,我们可能会希望把一些关联的数据存放在一起,这样方便我们使用。但是这些数据的类型有时候并不一致,例如一个学生的信息:有名字(字符串),有年龄(整数),性别(字符)······这时候,我们就可以使用自定义类型——结构体类型,将这些类型不一样的关联数据放在一个结构体类型里面
这篇文章我们来讲讲结构体类型:
1,结构体的定义
2,结构体变量的创建与初始化
3,结构体成员的引用

?个人简介:努力学习ing
?个人专栏:C语言入门基础
?CSDN主页 愚润求学
?每日鸡汤:未来是怎么来的?未来不是等来的!


文章目录

结构体类型一,结构体类型的定义(声明)1,一般结构体定义2,组合型结构体定义 二,结构体变量的创建与初始化1,变量的创建(定义)(1)先定义结构体类型,在创建结构体变量(2)定义结构体类型,同时创建结构体变量(3)通过定义无名结构体类型来定义结构体变量 2,变量的初始化(1)按照结构体顺序初始化(2)按照指定的顺序初始化 三,结构体成员的引用

结构体类型

一,结构体类型的定义(声明)

1,一般结构体定义

C语言中结构体类型的定义形式:struct  结构体名{     成员项表列};//在定义结构体类型的时候,成员不需要初始化;当我们创建了变量时,才需要对变量成员初始化

例如我们要定义一个【有名字(字符串),有年龄(整数),性别(字符)】的结构体类型,名字叫stu:
定义形式如下??

struct stu{    char name[20];    int age;    char sex;}

2,组合型结构体定义

比如我们要在上面stu结构体的基础上补充一个出生日期(出生日期还要包括:年,月,日)
这个时候,我们就可以多定义一个能够记录出生日期的date结构体类型,然后再在定义学生结构体类型的时候,引用这个date结构体
具体定义形式如下??

struct date{    int year;    int month;    int day;};struct stu{    char name[20];    int age;    char sex;    struct date birthday;};

注意:
在定义组合型的结构体类型时,一定要遵守先定义后使用的原则。
例如:定义上面的stu结构体时,成员birthday是一个结构体变量,那我们就要保证birthday这个结构体变量的结构体类型在之前已经先定义过了(在这里也就是date已经先定义了)

二,结构体变量的创建与初始化

1,变量的创建(定义)

(1)先定义结构体类型,在创建结构体变量
struct stu   /*定义学生结构体类型*/{    char name[20];   /*姓名*/    int age;        /*年龄*/    char sex;      /*性别*/};struct stu s1,s2;   /*定义结构体变量*/

利用这种定义形式,可以在程序的任何地方,在先定义后使用的原则下,定义属于改结构体类型的变量

(2)定义结构体类型,同时创建结构体变量
struct stu   /*定义学生结构体类型*/{    char name[20];   /*姓名*/    int age;        /*年龄*/    char sex;      /*性别*/}s1,s2;    /*同时定义结构体变量*/

将变量直接定义在结构体类型的后面,采用这样的定义方式,在书写上比较紧凑。但对要多处定义结构体变量不方便

(3)通过定义无名结构体类型来定义结构体变量
struct     /*无结构体名*/{    char name[20];       int age;            char sex;      }s1,s2;    /*同时定义结构体变量*/

但是,由于该定义方式无法记录该结构体的类型,所以,这种定义形式除了直接定义变量外,不能再定义该结构体的其他变量。(这样的定义,使程序的扩展性受到很大限制,所以建议少用这种方式定义结构体变量)

2,变量的初始化

struct stu   {    char name[20];       int age;            char sex;      //我们用B表示男,用G表示女};

假如我们要创建两个上面这种结构体类型的变量,并初始化:

(1)按照结构体顺序初始化
struct stu s1 = {"zhangsan",20,'B'};struct stu s2 = {"wangwu",18,'G'};
(2)按照指定的顺序初始化

其实也就是用到了对结构体成员的引用

struct stu s1 = {.age = 20, .name = "zhangsan", .sex = 'B'};struct stu s2 = {.age = 18, .name = "wangwu", .sex = 'G'};

当然,在定义结构体类型的同时,创建的结构体变量,也可以同时初始化

struct stu {    char name[20];       int age;            char sex;    }s1 = {"zhangsan",20,'B'};

三,结构体成员的引用

对结构体成员的引用我们需要使用到运算符“.”

使用格式:
结构体类型变量名.成员名
如:s1.age

每使用一次.运算符,其实就是拨开了一层。
赋值时,我们需要找到最内层的(能赋值的)成员
例如??

#include<stdio.h>struct date{    int year;    int month;    int day;};struct stu{    char name[20];    int age;    char sex;    struct date birthday;};int main(){    struct stu s1 = { "zhangsan",20,'B',{2005,1,1} };    printf("%d\n", s1.age);    printf("%d\n", s1.birthday.day);}

这个程序里的结构体类型stu是内包含一个结构体成员birthday的,所以当我们要引用birthday里面的成员时,我们就需要再用一次.运算符:s1.birthday.day

运行结果:
在这里插入图片描述


?我的分享也就到此结束啦?
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
?公主,王子:点赞?→收藏⭐→关注?
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!


点击全文阅读


本文链接:http://zhangshiyu.com/post/103323.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1