扬声器1:让我们写一个程序, 提示输入名称和用户 房子的三名学生。 现在,为了存储这些名字和房子 我们可以使用,什么的,六个变量。 三个字符串的名称,和另一 三根弦的房子, 但我们已经知道,我们可以清理 该代码使用数组代替, 例如大小为3的数组 三个名字,而另一个数组 大小3的房子。 但事实证明,我们可以清理它 进一步的是,居然让那些 名称和房屋在一起,使一个 学生的姓名以及他或她的房子 以某种方式封装,所以 说话,到同一个变量。 要做到这一点,不过,我们需要声明 我们自己的数据类型,我们自己的类型在C中, 将c的作者并不一定 想起多年前。 要做到这一点,我们可以使用关键字 的typedef,随着 其它关键字struct。 让我们一起来看看。 里面structs.h的,我已经 得到由开始 包括CS50库。 我接下来要输入typedef结构, 然后一个大括号。 里面的结构的,我要去 指定学生必须有一个 叫名字的字符串,而另一个 字符串被称为房子。 我打算再关闭我的花括号, 并指定名称 这个新的数据类型应为学生。 换句话说,通过这个语法有我 宣布我自己的一个新的数据类型 根本不存在刚才和 这种数据类型的内部有两个数据 字段或数据成员,一个叫名字, 一个叫房子,这两者 为string类型。 现在,让我们使用这种类型的 在实际的程序。 在structs0.c,我已经得到了类似 我已经开始与一些 样板代码,而且我现在 要使用该数据 学生类型,如下所示。 我首先要声明一个 学生类型数组,我会 调用数组的学生 - 复数 - 我会指定它的大小将 三种,其中,通知,很值 不断的学生 - 在所有的首都 - 我已经声明了这里, 前面的文件中。 现在让我们遍历这三个 学生,并提示用户 他们的名字和房屋。 对于int我得到0,i小于 较恒定的,我+ +。 而现在这个体内的内 环,我要打印出来的东西 像学生的名字。 我当时要去真正享受 通过指定学生的姓名 学生支架I。 换句话说,我想第i个学生 在被称为学生的阵列,但现在 我想获得在该第i个学生 名,而要做到这一点,我将使用 本。运营商,以获得在一个 该结构的特定领域内。 所以我指定学生支架I。名称 得到的GetString的返回值()。 同时,我要打印出来 类似的东西,说学生 房子,现在我要指定 即第i个学生家场 将得到的返回值 另一个电话给GetString()。 现在,让我们做一些与这三个 学生的姓名和房屋, 一些简单的像印刷 每出一个句子。 对于int我得到0,我再次小于 学生,我+ +的printf“%s是在%s。 反斜杠N“,现在让我插上 这两个字段的值, 学生支架I。名,逗号, 学生支架I。房子,靠近 括号,分号。 现在我需要做的一件事。 在这个文件的底部,我需要 释放分配的内存 在幕后GetSring(),这 当然调用malloc,为了 为字符串分配内存 用户类型。 但是,这很简单。 对于int我得到0,i小于 生,我+ +,和在体内 这个for循环,我只是要 免费提供学生支架我。名字, 和免费的学生支架I。房子。 现在,我们已经清楚地使用了三个for循环 这个程序中,当我真的 可以只使用一种,但这是 只是用于演示的缘故,使 我们可以在三个不同的指定 步骤究竟我们正在做的。 我们首先得到一个名字和一所房子 每个学生,我们则 打印出的名称和房子 每三个学生,而且 那么我们要释放内存 使用的每个学生。 但可以肯定,我们可能已经结合本 成一个较大的for循环。 现在,让我们保存,编译, 并运行此程序。 使结构0/0结构,学生的 名字,让我们提供大卫,他就住 在奥美楼,学生的姓名,让我们 劳伦说,她会住在莱弗里特 房子,学生的姓名,罗布,他会 住在柯克兰楼。 事实上,大卫是在奥美, 劳伦是莱弗里特, 和Rob在柯克兰。