------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、结构体
1.概念
在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型。
数组:只能由多个相同类型的数据构成
结构体:可以由多个不同类型的数据构成
2.定义形式
struct 结构体名{
类型名1 成员名1;
类型名2 成员名2;
……
类型名n 成员名n;
};
例如
// 定义结构体类型
struct Person
{ // 里面的3个变量,可以称为是结构体的成员或者属性
int age; // 年龄
double height; // 身高
char *name; // 姓名
};
3.使用方式
1>先定义结构体类型,再定义变量
struct Student {
char *name;
int age;
};
struct Student stu;
2>定义结构体类型的同时定义变量
struct Student {
char *name;
int age;
} stu;
结构体变量名为stu
3>直接定义结构体类型变量,省略类型名
struct {
char *name;
int age;
} stu;
结构体变量名为stu
4.使用注意
1>不允许对结构体本身递归定义
2>结构体内可以包含别的结构体
3>定义结构体类型,只是说明了该类型的组成情况,并没有给它分配存储空间,就像系统不为int类型本身分配空间一样。只有当定义属于结构体类型的变量时,系统才会分配存储空间给该变量
4>结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列
5.使用
1>一般对结构体变量的操作是以成员为单位进行的,引用的一般形式为:结构体变量名.成员名
2>如果某个成员也是结构体变量,可以连续使用成员运算符"."访问最低一级成员
3>相同类型的结构体变量之间可以进行整体赋值
6.实例
#include <stdio.h>
int main()
{
struct Date
{
int year;
int month;
int day;
};
// 类型
struct Student
{
int no; // 学号
struct Date birthday; // 生日
struct Date ruxueDate; // 入学日期
// 这种写法是错误的
//struct Student stu;
};
struct Student stu = {1, {2000, 9, 10}, {2012, 9, 10}};
printf("year=%d,month=%d,day=%d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
return 0;
}
二、枚举
1.概念
枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。
2. 一般形式为:
enum 枚举名 {枚举元素1,枚举元素2,……};
enum Season {spring, summer, autumn, winter};
3.定义方式
1>先定义枚举类型,再定义枚举变量
enum Season {spring, summer, autumn, winter};
enum Season s;
2>定义枚举类型的同时定义枚举变量
enum Season {spring, summer, autumn, winter} s;
3>省略枚举名称,直接定义枚举变量
enum {spring, summer, autumn, winter} s;
4.使用注意
1> C语言编译器会将枚举元素(spring、summer等)作为整型常量处理,称为枚举常量。
2> 枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。
enum Season {spring, summer, autumn, winter};
也就是说spring的值为0,summer的值为1,autumn的值为2,winter的值为3
3> 也可以在定义枚举类型时改变枚举元素的值
enum season {spring, summer=3, autumn, winter};
没有指定值的枚举元素,其值为前一元素加1。也就说spring的值为0,summer的值为3,autumn的值为4,winter的值为5
三、typedef
1.概念
typedef关键字为各种数据类型定义一个新名字(别名)。
2.实例
#include <stdio.h>
typedef int Integer;//将int定义为Integer,就可以用它来定义变量
typedef unsigned int UInterger;//将unsigned int定义为UIntergar
typedef float Float;
int main(int argc, const char * argv[]) {
Integer i = -10;
UInterger ui = 11;
Float f = 12.39f;
printf("%d %d %.2f", i, ui, f);
return 0;
}
3.typedef与结构体
typedef struct MyPoint {
float x;
float y;
} Point;
//用typedef给结构体MyPoint起了个别名叫做Point,然后就可以用Point来定义结构体了
//省略写法
typedef struct {
float x;
float y;
} Point;
4.typedef与枚举类型
// 定义枚举类型
enum Season {spring, summer, autumn, winter};
// 给枚举类型起别名
typedef enum Season Season;
int main(int argc, const char * argv[]) {
// 定义枚举变量
Season s = spring;
return 0;
}