黑马程序员---C基础12【结构体数组】【结构体指针】【结构体嵌套】【作为函数参数】【枚举类型】

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

【结构体数组】

1、结构体数组:

    结构体数组的每一个元素都是具有相同结构类型的下标结构变量;(可以表示一个群体,一个班学生档案)

2、结构数组定义

    定义格式:

    struct    结构名{

      成员列表;

      }数组名[数组长度];

 

 1  1)定义结构体的同时定义数组;
 2
 3   struct stu{
 4
 5         int num;
 6
 7           char name[10];
 8
 9           int age;
10
11       }arr[10];
12
13   2)先定义结构体后定义数组
14
15    struct stu{
16
17           int num;  
18
19           char name[10];
20
21           int age;
22
23       }
24
25       struct stu arr[10];
26
27 3、结构体数组的初始化:
28
29   1)定义结构体数组的时候,进行初始化;
30
31   struct stu{
32
33           int num;
34
35           char name[10];
36
37           int age;
38
39       }arr[1]={10,"sdfs",10};
40
41   2)定义的同时进行初始化;
42
43    struct stu{
44
45           int num;
46
47           char name[10];
48
49           int age;
50
51       };
52
53       struct stu arr[1]={10,"sdfs",10};
54
55   3)先定义后初始化;
56
57   arr[0]=(struct stu){10,"sdfs",10};
58
59   4)先定义结构体数组再初始化;
60
61     arr[0].age=10;
62
63       arr[0].num=10;
64
65       strcpy(arr[0].name, "张三");

4、结构数组的遍历:

     printf("%d %s %d\n",arr[0].age,arr[0].name,arr[0].num);

【结构体指针】

1、指向结构体变量的指针:

  结构指针变量中的值是所指向的结构变量的首地址;

  一般格式:

  struct  结构名  *结构指针变量名;可以看成一个类型,如int

2、定义:

 1 1)
 2
 3 struct car{
 4
 5         int num;
 6
 7         int speed;
 8
 9     }car1,*p;
10
11 2)
12
13  struct car{
14
15         int num;
16
17         int speed;
18
19     }car1;
20
21     struct car *p;
22
23 3)
24
25 struct car{
26
27         int num;
28
29         int speed;
30
31     }car1;
32
33     struct car *p=&car1;

    结构体名:car;

    结构体变量名:car1

    结构体指针:p;

3、指向结构体变量的指针

    (*结构指针变量).成员名;

    结构指针变量--->成员名;

 1 1) struct car{
 2
 3         int num;
 4
 5         int speed;
 6
 7     }car1;
 8
 9     struct car *p = &car1;
10
11     (*p).num=10;
12
13     printf("%d\n",(*p).num);
14
15     return 0;
16
17 2)
18
19 struct car{
20
21         int num;
22
23         int speed;
24
25     }car1;
26
27     struct car *p = &car1;
28
29     (*p).num=10;
30
31     p->speed=10;
32
33     printf("%d %d\n",(*p).num,p->speed);

    此处p一定是一个结构体指针!才可用—>;

【结构体嵌套】

1、结构体嵌套使用;(if嵌套,三目运算符嵌套,for循环嵌套,递归函数)

    成员也可以又是一个结构,即构成了嵌套的结构;

    1)结构体定义的里面有其他结构体;不可以嵌套自己类型的变量;

     2)结构体不可以嵌套自己的变量,但是可以嵌套指向自己类型的指针;  

    

    

 1 struct date{
 2                 int year;
 3                 int mon;
 4                 int day;
 5             };
 6             struct stu{
 7                 char *name;
 8                 int num;
 9                 struct stu *s;可以用指向自己的指针;
10                 struct date da;可以看成一个特殊的类型,用法类似int,char的类型;
11             
12             };

2、结构体嵌套使用

1 1)  struct stu stu1={"张三",10,{1992,7,9}};
2     printf("name: %s\nage: %d\ndate: %d-%02d-%02d\n",stu1.name,stu1.num,stu1.da.year,stu1.da.mon,stu1.da.day);
3
4 struct stu stu1={"张三",10,{1992,7,9,{2,3,4}}};
5     printf("name: %s\nage: %d\ndate: %d-%02d-%02d %02d:%02d;%02d\n",stu1.name,stu1.num,stu1.da.year,stu1.da.mon,stu1.da.day,stu1.da.ti.hour,stu1.da.ti.min,stu1.da.ti.sec);
2)  struct person{
        char *name;
        int age;
        struct person *child;
    };
    struct person kim={"kim",8,NULL};
    struct person p1={"lizhiying",40,&kim};
    printf("%s的儿子是:%s,儿子的年龄:%d\n",p1.name,(*p1.child).name,(*p1.child).age);
    用指针来嵌套;

3、成员值做函数的参数;

    结构体成员作为函数的参数就是值传递;

 1 struct car{
 2
 3     int lunzi;
 4
 5     int speed;
 6
 7 };
 8
 9 void xiu(int n){
10
11     n = 2;
12
13 };
14
15 void xiu1(struct car c1){
16
17     c1.lunzi=2;
18
19 };
20
21 int main(int argc, const char * argv[]) {
22
23     // insert code here...
24
25     struct car car1={4,200};
26
27     xiu(car1.lunzi);
28
29     xiu1(car1);
30
31     printf("%d\n",car1.lunzi);
32
33     return 0;
34
35 }

4、结构体指针作为函数参数;

    实质是地址传递;

    用结构体变量的地址传递给函数;

    也可以理解为用结构体指针作为函数的参数

 1 struct car{
 2
 3     int lunzi;
 4
 5     int speed;
 6
 7 };
 8
 9 void xiu(struct car *p)存的是一个地址{
10
11     p->lunzi=2;
12
13 }
14
15 int main(int argc, const char * argv[]) {
16
17     // insert code here...
18
19     struct car car1={4,200};
20
21     xiu(&car1);将地址传递;
22
23     printf("%d\n",car1.lunzi);
24
25     return 0;
26
27 }

【枚举类型】

1、枚举类型:

有些变量的取值被限定在一个有限的范围内,例如:一个星期七天;

    枚举是一种基本数据类型,而不是一中构造类型,因为他不能再分解为任何基本类型;

2、定义

    一般形式:

      enum  枚举类型名{枚举值表};

      在枚举值表中应罗列出所有的可用值,这些值也称为枚举元素;

          枚举元素的命名:k Icolor White

          enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ};

           enum iColor c;

 

3、枚举变量的定义:

    enum iColor c;可以当成一种类型,用法同int,char·····;

    enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ}a,b;

4、枚举类型变量的初始化;

    enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ}a,b;

     enum iColor c;

     c = kIcolorWhite;

 

5、枚举变量的使用;

    1)枚举类型定义完成后,系统会默认自动给每一个元素赋值一个int的初始值,从第一个元素开始值0,依次加1

    //                   0             1         2        int都是整型的

      enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ};

    2)手动赋值,

      //               0             1         2        int都是整型的

        //               0             3         4

     enum iColor{kIcolorWhite,kIcolorBlack=3,kIcolorTHJ};

5、应用;

    可以定义尝试性一类数据,一周的星期数;

    枚举元素可以理解为整型的变量,int;

时间: 2024-08-07 21:18:35

黑马程序员---C基础12【结构体数组】【结构体指针】【结构体嵌套】【作为函数参数】【枚举类型】的相关文章

黑马程序员----Java基础之方法和数组

------- android培训.java培训.期待与您交流! ---------- 方法的格式 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2 ....){                  方法体;                    return 返回值;   } 方法的格式详细说明: (1): 修饰符    比较多,后面会详细介绍.目前使用  public static (2): 返回值类型   用于限定返回值的数据类型 (3): 方法名   就是一个名称,它的存

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

黑马程序员_Java基础加强(上)

1.静态导入 静态导入是jdk1.5版本以后出现的新特性,一般是指导入静态方法,如:import static java.lang.System.out 是指导入系统输出的静态方法. 例: import static java.lang.System.out //导入java.lang包下的System类的静态方法out public class StaticImport { public static void main(String[] args) { int x=1; x++; out.p

【黑马程序员】第12课:文件上传&文件下载&注解

<pre> day12 上节内容回顾 1.jstl的标签 *if  choose *forEach <c:forEachvar="l" items="${list}"> 2.jsp开发模式 *模型一 *模型二(mvc模式) **mvc模式 ***m:模型,使用javabean ***v:视图,使用jsp ***c:控制器,使用servlet *dao模式:数据访问对象,专注于对数据库的操作 **首先创建接口,在接口里面定义操作数据库的方法 *

黑马程序员——java基础——集合(Collection)

 黑马程序员--java基础--集合(Collection) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 集合框架的构成及分类,如下图: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 3.

黑马程序员_Java基础_接口

------- android培训.java培训.期待与您交流! ---------- 0.接口知识体系 Java接口的知识体系如下图所示,掌握下图中的所有知识就可精通接口. 1.接口概论 1)接口概念 接口是从多个相似类中抽象出来的规范,接口中不包含普通方法,所有方法都是抽象方法,接口不提供实现.接口体现的是规范和实现分离的哲学.规范和实现分离正是接口的好处,让软件系统的各个组件之间面向接口耦合,是一种松耦合的设计.接口定义的是多个类共同的公共行为规范,定义的是一组公用方法. 2)接口与抽象类

黑马程序员——集合基础知识(Collection)

集合基础知识 数组:长度固定,可存基本数据和对象. 集合:只能放对象,不固定.容器也有共性,不断抽取成一个体系,集合框架.参阅顶层创建底层.顶层是collection.collection里有两个常见的接口,List和Set.常见集合有Arraylist,linkedlist,vector,hashSet TreeSet.为什么会出现这么多的容器呢,因为每一个容器对数据的存储方式都有不一样,.这个存储方式称之为数据结构!!因为他们的特点不一样 list因为有脚标存储和删除的效率很低,Set的效率

黑马程序员——集合基础知识(Map)

Map概念 要同时存储两个元素,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 存储键值对,并且键是唯一的. 1.添加. put()如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值. 2.删除 remove()按键删除. 3.判断 4.获取 get(object key) size() value()拿值value返回的是值的集合... HashTable 底层是哈西数据结构,不可以存入null键null值,线程同步. HashMap 底层是哈西表数据结构,允许使用n

黑马程序员——Java基础知识之多线程协同

多线程协同 线程间的通讯:对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤,但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必须用在