IOS学习第15天
结构体
- 结构体数组
1.结构体数组的声明
struct 结构体名字 数组名[数组长度];
struct Student students[5];
2.结构体数组的初始化:(赋值)
1>静态初始化:定义的同时赋值
struct Student students[] = {
{"小明",18},
{"xiaohong",20},
{"xiaoxxx",30},
{},
{}
};
2>动态初始化:先定义后初始化
struct Student students[5];
//只有一种方式:挨个赋值
students[0] = {};
students[1] = {};
3.结构体数组的长度计算:(长度:数组中的元素的个数)
sizeof(数组名)/sizeof(元素的数据类型);
sizeof(students)/sizeof(struct Student);
```
* 结构体指针
1.声明格式
xxx aa;
xxx* p_aa = &aa;
struct 结构体名字 变量名;
struct 结构体名字 * p_aaa = &变量名;
2.怎么给结构体指针赋值
struct 结构体名字 * p_aa;
p_aa = & 结构体变量名;
3.结构体指针怎么使用?**
struct Student
{
char * name;
int age;
};//结构体类型
//定义了一个结构体变量
struct Student xiaoming;
//定义了一个结构体指针
struct Student * p_xiaoming = &xiaoming;
如何通过结构体指针 给结构体变量赋值
1>
(*p_xiaoming).name = “小明”;
(*p_xiaoming).age = 18;
2>指针可以直接访问成员变量
p_xiaoming->name = "小红";
p_xiaoming->age = 18;
注意:数组名是一个地址,首元素的地址
函数名是一个地址,函数在内存中的首地址
结构体变量名,不是一个地址,要获取结构体变量的地址 &结构体变量名
“小练习:
定义一个 dog 类型, 年龄 颜色
struct Dog{
//成员变量
int age;
char * color;
};
定义一个结构体指针,指向一个狗的变量,并且赋值
struct Dog wangcai;
//结构体指针 指向了 wangcai这个结构体
struct Dog * p_wangcai = &wangcai;
//通过结构体指针 给 结构体的成员变量赋值
p_wangcai->age = 200;
p_wangcai->color = “土豪金”;
“`
* 结构体嵌套
1,用1个变量来保存1个人.
姓名
年龄
出生日期
家产
日期:
年 int
月 int
日 int
struct Date
{
int year;
int month;
int day;
};
struct Person
{
char* name;
int age;
double money;
//出生日期.
struct Date birthday;
};
2."练习
// 一个学生,有姓名,学号,3门课程(语文,数学,英语),每门课程都有课程名称和分数
//学生:姓名,学号,三门课程
//每一门课程:课程名称 ,分数
//课程的结构体
struct KeCheng{
char * kcName;
float score;
};
//学生的结构体
struct Student{
char * name;//姓名
int sno;//学号
struct KeCheng kechengs[3];
// struct KeCheng kecheng2;
// struct KeCheng kecheng3;
};
//试一下给 小明结构体变量赋值
struct Student xiaoming;
xiaoming.name = "小明";
xiaoming.sno = 10086;
xiaoming.kechengs[0] = (struct KeCheng){"语文",100};
xiaoming.kechengs[1] = (struct KeCheng){"英语",200};
xiaoming.kechengs[2] = (struct KeCheng){"数学",120};
//
printf("名字是%s,学号是%d,%s的成绩是%d",xiaoming.name,xiaoming.sno,xiaoming.kechengs[0].keName,xiaoming.kechengs[0].score);
```
* 结构体与函数
1.结构体作为函数的参数
(1)结构体作为参数传值是值传递
(2)如果你就是希望函数的内部可以修改实参结构体变量的值,那么就要使用指针
2.结构体作为函数的返回值
(1)在返回的时候,直接将这个结构体变量的值返回即可
(2)如果你要返回结构体变量的地址,那么就要把这个结构体变量创建在堆区
###枚举变量
1.什么时候要定义枚举类型?
有一个变量,要求这个变量 只能取值 几种情况之一
2.如何创建一个枚举类型
enum 枚举名字{
//可能的几种情况
情况1,
情况2,
情况3,
…
};
3.声明枚举类型的变量
//苹果官方 关于C中的枚举的命名规范,以k开头 后面的单词首个字母大写
//OC中的枚举,以相应的枚举名开头
enum Sex{
kMan,
kFemale,
kYao
};
enum Sex s1;//s1就是一个枚举变量
4.枚举变量的初始化
enum Sex s2 = kMan;
pragma mark - 18 [了解]枚举值所对应的整型的数
1.枚举的作用域
全局枚举
局部枚举
建议:一般写在文件的最上面,好让所有的函数可以访问
2.每1个枚举值/枚举项 都有1个对应的整型的数.
默认是从0开始,往后一次递增1
3.能不能直接为枚举变量赋值1个整型的数据.
可以,但是人类看不懂,所以不建议这么写
4.还可以手动指定,每一个枚举值对应的整型数据
enum Direction
{
East = 10,
South = 20,
North = 40,
West
};
pragma mark - 19 [了解]枚举的使用规范
1.定义枚举类型的时候
枚举妹名字 首个字母大写,如果由多个单词组成,那么每一个单词的首个字母都大写
2.枚举值/枚举项的命名
一般都是k开头
也可以是 枚举名字开头
enum WX{
WXJin,
WXMu,
WXShui,
WXHuo,
WXTu
};
“`
typedef
- 使用typedef将枚举类型和结构体类型取一个短别名
“`
1. 使用typedef为结构体类型取别名.(常用)
1>先声明,后起别名
struct Student
{
char *name;
int age;
int score;
};
typedef struct Student Student;
2>声明的同时起别名
typedef struct _Student
{
char *name;
int age;
int score;
}Student;
3>匿名结构体起别名
typedef struct
{
char *name;
int age;
int score;
}Student;
2,使用typedef为枚举类型取1个短别名
1>先声明,后起别名
enum Direction
{
DirectionEast,
DirectionSouth,
DirectionWest,
DirectionNorth
};
typedef enum Direction Direction;
2>声明的同时起别名
typedef enum _Direction
{
DirectionEast,
DirectionSouth,
DirectionWest,
DirectionNorth
}Direction;
3>匿名枚举起别名
typedef enum
{
DirectionEast,
DirectionSouth,
DirectionWest,
DirectionNorth
}Direction;
```