C语言结构体与枚举等类型


一、C语言结构体

结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有三种形式,分别介绍如下:

1、结构体定义的三种形式

       1>     先定义结构体类型,再定义结构体类型变量:

struct stu / *定义学生结构体类型* /
{
    char name[20]; / * 学生姓名* /
     char sex; / * 性别* /
       long num; / *学号* /
       float score[3]; / * 三科考试成绩* /
};
struct stu student1,student2;/ * 定义结构体类型变量* /
struct stu student3,student4;


用此结构体类型,可以定义更多的该结构体类型变量。

       2>     定义结构体类型同时定义结构体类型变量:

struct data
{
    int day;
    int month;
    int year;
} time1,time2;


也可以再定义如下变量:
struct data time3,time4;
用此结构体类型,同样可以定义更多的该结构体类型变量。

       3>     直接定义结构体类型变量:

struct
{
    char name[20]; / *学生姓名* /
    char sex; / *性别* /
    long num; / *学号* /
    float score[3]; / *三科考试成绩* /
} person1,person2; / *定义该结构体类型变量* /



该定义方法由于无法记录该结构体类型,所以除直接定义外,不能再定义该结构体类型变量


2、结构体用法

       1>    基本用法

                           如:

 struct Person  // 这一句只是定义结构体类型,并不会分配存储空间。
     {
int age;
double height;
char *name;
}
struct Person p1 = {10, 1.55,"jack"};    //这一步才开始定义结构体变量,开始分配存储空间。
printf("age = %d,height = %f,name = %s",p1.age,p1.height,p1.name);   //调用打印。


       2>    所占内存:结构体所占存储空间一定为最大成员所占空间的倍数。如结构体含有int 和char *,原本应该是4+8,那么最后应该是16。

       3>    如果我们再定义一个结构体变量,struct Person P2={.height= 1.34;.age=12;.name="sfd"};

                         p2 = p1;                                            // 会将p1所有的成员变量对应的值赋给p2的成员。


二、结构体数组

1、结构体数组定义举例

 struct stu s[3]=
{
{1,"jack",300},{2,"rose",400},{3,"kim",200}
}


如果更改某组数值,不可以用 s[0]={4,"tom",600};
只能是s[0].no =4;这样去修改。


三、结构体嵌套

1、结构体嵌套举例

 

struct Date
{
   int year;
   int month;
    int day;
};
struct Student
{
    int no;
    struct Date birthday;//嵌套结构体定义生日
    struct Date ruxueriqi //嵌套结构体定义入学日期
}
      struct Student stu = {1,{2000,9,10},{2012,8,23}};
printf("year = %d,month = %d,day = %d",stu.birthday.year, stu.birthday.month, stu.birthday.day);



三、枚举类型

1、枚举类型举例

如果一种变量只有几种可能的值,可以定义为枚举类型。所谓“枚举类型”是将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。

enum Season
{
spring,(默认值为0,后面依次加一)
summer,
autumn,
winter
};//定义枚举类型
enum Season s;//定义枚举类型变量



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值