2 00:00:00,000 --> 00:00:02,760 >> 扬声器1:让我们写一个程序, 提示输入名称和用户 3 00:00:02,760 --> 00:00:04,700 房子的三名学生。 4 00:00:04,700 --> 00:00:08,840 现在,为了存储这些名字和房子 我们可以使用,什么的,六个变量。 5 00:00:08,840 --> 00:00:12,260 三个字符串的名称,和另一 三根弦的房子, 6 00:00:12,260 --> 00:00:16,560 但我们已经知道,我们可以清理 该代码使用数组代替, 7 00:00:16,560 --> 00:00:20,220 例如大小为3的数组 三个名字,而另一个数组 8 00:00:20,220 --> 00:00:22,110 大小3的房子。 9 00:00:22,110 --> 00:00:25,870 但事实证明,我们可以清理它 进一步的是,居然让那些 10 00:00:25,870 --> 00:00:30,520 名称和房屋在一起,使一个 学生的姓名以及他或她的房子 11 00:00:30,520 --> 00:00:34,940 以某种方式封装,所以 说话,到同一个变量。 12 00:00:34,940 --> 00:00:39,095 >> 要做到这一点,不过,我们需要声明 我们自己的数据类型,我们自己的类型在C中, 13 00:00:39,095 --> 00:00:42,660 将c的作者并不一定 想起多年前。 14 00:00:42,660 --> 00:00:45,630 要做到这一点,我们可以使用关键字 的typedef,随着 15 00:00:45,630 --> 00:00:47,200 其它关键字struct。 16 00:00:47,200 --> 00:00:48,160 让我们一起来看看。 17 00:00:48,160 --> 00:00:50,650 里面structs.h的,我已经 得到由开始 18 00:00:50,650 --> 00:00:52,560 包括CS50库。 19 00:00:52,560 --> 00:00:57,640 我接下来要输入typedef结构, 然后一个大括号。 20 00:00:57,640 --> 00:01:01,370 里面的结构的,我要去 指定学生必须有一个 21 00:01:01,370 --> 00:01:04,960 叫名字的字符串,而另一个 字符串被称为房子。 22 00:01:04,960 --> 00:01:08,430 我打算再关闭我的花括号, 并指定名称 23 00:01:08,430 --> 00:01:11,420 这个新的数据类型应为学生。 24 00:01:11,420 --> 00:01:15,550 换句话说,通过这个语法有我 宣布我自己的一个新的数据类型 25 00:01:15,550 --> 00:01:19,910 根本不存在刚才和 这种数据类型的内部有两个数据 26 00:01:19,910 --> 00:01:24,270 字段或数据成员,一个叫名字, 一个叫房子,这两者 27 00:01:24,270 --> 00:01:25,630 为string类型。 28 00:01:25,630 --> 00:01:27,690 >> 现在,让我们使用这种类型的 在实际的程序。 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 在structs0.c,我已经得到了类似 我已经开始与一些 31 00:01:34,090 --> 00:01:36,999 样板代码,而且我现在 要使用该数据 32 00:01:36,999 --> 00:01:39,100 学生类型,如下所示。 33 00:01:39,100 --> 00:01:42,450 我首先要声明一个 学生类型数组,我会 34 00:01:42,450 --> 00:01:43,920 调用数组的学生 - 35 00:01:43,920 --> 00:01:44,630 复数 - 36 00:01:44,630 --> 00:01:49,360 我会指定它的大小将 三种,其中,通知,很值 37 00:01:49,360 --> 00:01:50,880 不断的学生 - 38 00:01:50,880 --> 00:01:51,890 在所有的首都 - 39 00:01:51,890 --> 00:01:54,930 我已经声明了这里, 前面的文件中。 40 00:01:54,930 --> 00:01:58,280 现在让我们遍历这三个 学生,并提示用户 41 00:01:58,280 --> 00:02:00,050 他们的名字和房屋。 42 00:02:00,050 --> 00:02:05,422 >> 对于int我得到0,i小于 较恒定的,我+ +。 43 00:02:05,422 --> 00:02:08,600 而现在这个体内的内 环,我要打印出来的东西 44 00:02:08,600 --> 00:02:11,470 像学生的名字。 45 00:02:11,470 --> 00:02:14,890 我当时要去真正享受 通过指定学生的姓名 46 00:02:14,890 --> 00:02:17,290 学生支架I。 47 00:02:17,290 --> 00:02:21,550 换句话说,我想第i个学生 在被称为学生的阵列,但现在 48 00:02:21,550 --> 00:02:25,340 我想获得在该第i个学生 名,而要做到这一点,我将使用 49 00:02:25,340 --> 00:02:30,160 本。运营商,以获得在一个 该结构的特定领域内。 50 00:02:30,160 --> 00:02:37,100 所以我指定学生支架I。名称 得到的GetString的返回值()。 51 00:02:37,100 --> 00:02:40,310 同时,我要打印出来 类似的东西,说学生 52 00:02:40,310 --> 00:02:45,410 房子,现在我要指定 即第i个学生家场 53 00:02:45,410 --> 00:02:49,480 将得到的返回值 另一个电话给GetString()。 54 00:02:49,480 --> 00:02:52,350 >> 现在,让我们做一些与这三个 学生的姓名和房屋, 55 00:02:52,350 --> 00:02:56,230 一些简单的像印刷 每出一个句子。 56 00:02:56,230 --> 00:03:07,580 对于int我得到0,我再次小于 学生,我+ +的printf“%s是在%s。 57 00:03:07,580 --> 00:03:12,600 反斜杠N“,现在让我插上 这两个字段的值, 58 00:03:12,600 --> 00:03:19,055 学生支架I。名,逗号, 学生支架I。房子,靠近 59 00:03:19,055 --> 00:03:21,290 括号,分号。 60 00:03:21,290 --> 00:03:23,020 >> 现在我需要做的一件事。 61 00:03:23,020 --> 00:03:26,600 在这个文件的底部,我需要 释放分配的内存 62 00:03:26,600 --> 00:03:30,290 在幕后GetSring(),这 当然调用malloc,为了 63 00:03:30,290 --> 00:03:32,500 为字符串分配内存 用户类型。 64 00:03:32,500 --> 00:03:35,720 但是,这很简单。 65 00:03:35,720 --> 00:03:42,610 对于int我得到0,i小于 生,我+ +,和在体内 66 00:03:42,610 --> 00:03:48,670 这个for循环,我只是要 免费提供学生支架我。名字, 67 00:03:48,670 --> 00:03:52,300 和免费的学生支架I。房子。 68 00:03:52,300 --> 00:03:55,620 >> 现在,我们已经清楚地使用了三个for循环 这个程序中,当我真的 69 00:03:55,620 --> 00:03:58,800 可以只使用一种,但这是 只是用于演示的缘故,使 70 00:03:58,800 --> 00:04:02,850 我们可以在三个不同的指定 步骤究竟我们正在做的。 71 00:04:02,850 --> 00:04:06,120 我们首先得到一个名字和一所房子 每个学生,我们则 72 00:04:06,120 --> 00:04:08,900 打印出的名称和房子 每三个学生,而且 73 00:04:08,900 --> 00:04:11,910 那么我们要释放内存 使用的每个学生。 74 00:04:11,910 --> 00:04:15,310 但可以肯定,我们可能已经结合本 成一个较大的for循环。 75 00:04:15,310 --> 00:04:18,650 >> 现在,让我们保存,编译, 并运行此程序。 76 00:04:18,650 --> 00:04:26,850 使结构0/0结构,学生的 名字,让我们提供大卫,他就住 77 00:04:26,850 --> 00:04:31,580 在奥美楼,学生的姓名,让我们 劳伦说,她会住在莱弗里特 78 00:04:31,580 --> 00:04:36,590 房子,学生的姓名,罗布,他会 住在柯克兰楼。 79 00:04:36,590 --> 00:04:39,440 事实上,大卫是在奥美, 劳伦是莱弗里特, 80 00:04:39,440 --> 00:04:40,810 和Rob在柯克兰。 81 00:04:40,810 --> 00:04:43,425