黑马程序员——C语言------结构体、枚举

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

结构体

 

一、概述

当一个整体由多种数据构成时,我们可以用数组来表示这个整体,但是数组有个特点:内部的每一个元素都必须是相同类型的数据。

在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型。为此,C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它允许内部的元素是不同类型的。

二、结构体的定义

结构体内部的元素,也就是组成成分,我们一般称为"成员"。结构体的一般定义形式为:

struct 结构体名{

   

    类型名1 成员名1;

   

    类型名2 成员名2;

    ……

};

三、结构体变量的定义

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

struct Student {
    char *name;
    int age;
};
struct Student stu;


2.定义结构体类型的同时定义变量

struct Student {
    char *name;
    int age;
} stu;


3.直接定义结构体类型变量,省略类型名

struct {
    char *name;
    int age;
} stu;

注意:

1.结构体的成员可以是别的结构体但不可以递归

struct Date {
    int year;
    int month;
    int day;
};
 
struct Student {
char *name;
int age;
    struct Date birthday;
};

2. 结构体变量占用的内存空间是其成员所占内存之和,例如成员含有一个int,一个float,则在32位编译器中占用4+4=8个字节。

3. 相同类型的结构体变量之间可以进行整体赋值

</pre><p> </p><p>四、结构体变量的初始化</p><p>例如:</p><p></p><pre name="code" class="cpp">struct Student {
    char *name;
    int age;
};
 
struct Student stu ={"yang", 22};

注意:只能在定义变量的同时进行初始化赋值,初始化赋值和变量的定义不能分开

五、结构体变量成员的访问

struct Date {
     int year;
     int month;
     int day;
};
 
struct Student {
    char *name;
    struct Date birthday;
};
 
struct Student stu;
 
stu.name = “yang”;
stu.birthday.year =1992;


六、结构体数组

struct Student {

    char *name;

    int age;

};

struct Student stu[n];

与普通结构体一样有三种定义方式,n代表元素个数。

初始化:

struct Student{
    char *name;
    int age;
}
struct Student stu[2]= { {"yang", 22}, {"yu", 22} };

可以通过下标访问结构体数组元素。

七、指向结构体的指针

定义形式:struct 结构体名称 *指针变量名

访问结构体成员的方式:

1.结构体变量名.成员名

2.(*指针变量名).成员名

3.指针变量名->成员名

 

枚举

 

枚举是一种形式和结构体相似的数据类型。

一、概述

枚举是C语言中的一种基本数据类型,当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,用一个枚举类型的变量来表示性别,因为性别只有男,女两种取值。

 

二、枚举的定义

一般形式为:enum 枚举名 {枚举元素1,枚举元素2,……};

例如:enum Gender{male,female};

 

三 、枚举变量的定义

和结构体一样也有三种方式

1.先定义枚举类型,再定义枚举变量

enum Gender {male,female};

 

enum Gender g;

 

2.定义枚举类型的同时定义枚举变量

enum Gender {male,female} g; 

3.省略枚举名称,直接定义枚举变量

enum {male,female} g;

 

四、注意

1.C语言编译器会将枚举元素作为整型常量处理,称为枚举常量。

2.枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。

3.也可以在定义枚举类型时改变枚举元素的值

没有指定值的枚举元素,其值为前一元素加1。

 

五、赋值与遍历

1.可以给枚举变量赋枚举常量或者整型值

enum Gender {male,female} g;
g = male; // 等价于 g = 0;
g = 1; // 等价于 g = female;

2.遍历枚举元素

enum Gender {male,female} g
for (g = male; g<= female; g++) {
    printf("%d\n", g);
}

输出结果为:0

           1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值