结构体 枚举 typedef

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;
```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值