1 00:00:07,010 --> 00:00:09,640 [Powered by Google Translate] 函数是在一个较大的程序的代码段用于 2 00:00:09,640 --> 00:00:11,430 以执行特定的任务。 3 00:00:11,430 --> 00:00:15,060 它们也被称为程序,子程序,和子程序, 4 00:00:15,060 --> 00:00:18,320 因为他们真的是计划内的小程序。 5 00:00:18,320 --> 00:00:20,340 尽管你可能没有注意到, 6 00:00:20,340 --> 00:00:24,090 你最肯定已经使用的功能,如果你用C编程。 7 00:00:24,090 --> 00:00:26,770 当你写的东西在屏幕上使用printf, 8 00:00:26,770 --> 00:00:29,380 你实际使用printf的调用的函数。 9 00:00:29,380 --> 00:00:33,760 同样,调用getInt和GetString CS50为您提供的功能。 10 00:00:33,760 --> 00:00:37,750 作为程序员,我们使用的一些原因。 11 00:00:37,750 --> 00:00:41,240 >> 具有执行常见任务,如写在屏幕上 12 00:00:41,240 --> 00:00:44,480 并提示用户输入我们节省了时间编程时。 13 00:00:44,480 --> 00:00:47,510 这是没有必要编写代码来执行这些同样的事情 14 00:00:47,510 --> 00:00:49,520 因为他们已经为我们做了。 15 00:00:49,520 --> 00:00:54,580 它甚至没有必要,我们完全了解这些功能的内部工作原理。 16 00:00:54,580 --> 00:00:58,880 相反,我们只需要知道如何使用或致电他们在我们的程序中。 17 00:00:58,880 --> 00:01:02,040 这也有利于在较大的程序写入功能 18 00:01:02,040 --> 00:01:04,330 即使你不打算有他人使用它们, 19 00:01:04,330 --> 00:01:06,830 只是为了瓜分更大的任务在手。 20 00:01:06,830 --> 00:01:11,910 这样一来,你给结构就像你想给你的代码结构的一篇文章, 21 00:01:11,910 --> 00:01:15,180 与真正的大项目,使多人 22 00:01:15,180 --> 00:01:16,730 的不同部分,在相同的时间 23 00:01:16,730 --> 00:01:20,480 因为它是一个人的工作结束和另一个开始。 24 00:01:20,480 --> 00:01:26,530 >> 函数一般工作在1个或多个输入,已知作为参数或参数, 25 00:01:26,530 --> 00:01:30,520 这些输入变换成一输出值,该值然后返回。 26 00:01:30,520 --> 00:01:34,950 然而,它也可能有不使用任何输入参数的功能 27 00:01:34,950 --> 00:01:36,400 不返回的输出。 28 00:01:36,400 --> 00:01:38,790 好了,足够的蓬松的东西。 29 00:01:38,790 --> 00:01:41,790 让我们来看看一些真正的功能在C 30 00:01:41,790 --> 00:01:45,570 >> 在这里,我们有一个功能叫方,相信它或没有, 31 00:01:45,570 --> 00:01:47,570 计算输入的平方。 32 00:01:47,570 --> 00:01:49,490 让我们来分析一下它的语法。 33 00:01:49,490 --> 00:01:51,860 你看到的第一个字的功能,INT, 34 00:01:51,860 --> 00:01:57,460 指定返回类型的函数,即,函数的输出的C类型。 35 00:01:57,460 --> 00:02:00,370 此功能将输出一个int型的值。 36 00:02:00,370 --> 00:02:04,100 你看到下一个字的功能,在这种情况下,方的名称。 37 00:02:04,100 --> 00:02:07,390 适当地命名功能就显得尤为重要 38 00:02:07,390 --> 00:02:11,260 ,因为它可能是最显着的功能是什么文件。 39 00:02:11,260 --> 00:02:14,880 这可能是冷静来命名此功能SHAZAM和booyah的, 40 00:02:14,880 --> 00:02:18,340 但不会告诉我们任何有关的功能是什么。 41 00:02:18,340 --> 00:02:23,470 >> 下面的函数名来输入的功能,参数。 42 00:02:23,470 --> 00:02:26,380 他们列出一组括号内 43 00:02:26,380 --> 00:02:30,160 它们的类型和要使用的名称为他们身体内的功能。 44 00:02:30,160 --> 00:02:34,030 广场只需要1个参数,将int方, 45 00:02:34,030 --> 00:02:36,160 我已经决定放弃的名称x。 46 00:02:36,160 --> 00:02:40,760 这将结束在函数声明或原型。 47 00:02:40,760 --> 00:02:43,320 花括号括起的其余的功能 48 00:02:43,320 --> 00:02:45,870 表示的函数体的开始和结束, 49 00:02:45,870 --> 00:02:48,320 函数本身的定义。 50 00:02:48,320 --> 00:02:50,300 广场是一个非常简单的功能。 51 00:02:50,300 --> 00:02:54,100 只得到了1号线,因为所有我们需要做的是乘x的本身。 52 00:02:54,100 --> 00:02:59,250 这个词返回指定的输出值,并触发结尾的函数。 53 00:02:59,250 --> 00:03:03,430 要使用方的功能,我们需要提供适当的输入 54 00:03:03,430 --> 00:03:05,310 然后捕获输出。 55 00:03:05,310 --> 00:03:08,140 在这里,你会看到一对夫妇的方式这样做。 56 00:03:08,140 --> 00:03:13,600 我们可以通过在原始的诠释,6一样,或像一个变量,我们可以通过在。 57 00:03:13,600 --> 00:03:15,700 需要注意的是,每次我们调用方, 58 00:03:15,700 --> 00:03:18,330 我们捕获输出,在变量中,然后打印出来。 59 00:03:18,330 --> 00:03:22,690 然而,我们并没有返回值存储在变量中,然后打印。 60 00:03:22,690 --> 00:03:27,090 我们可以直接将其发送到printf,因为我们做的时候,我们方10, 61 00:03:27,090 --> 00:03:30,580 但是这并不意味着我们没有进入广场10的返回值 62 00:03:30,580 --> 00:03:32,230 在代码的其他地方。 63 00:03:32,230 --> 00:03:34,890 让我们来看看另一个简单的例子。 64 00:03:34,890 --> 00:03:38,750 >> 这一次,我们将总结2漂浮在一起,因此,我们可以看到一个函数看起来像什么 65 00:03:38,750 --> 00:03:41,220 它有2个输入,而不是只有1。 66 00:03:41,220 --> 00:03:43,950 正如你可以看到的,这是没有太大的不同。 67 00:03:43,950 --> 00:03:47,330 我们要做的是在第二个参数中添加名为b,浮子, 68 00:03:47,330 --> 00:03:51,820 使用一个逗号来分隔它的第一个参数的参数列表,飘起了。 69 00:03:51,820 --> 00:03:55,550 因此,我们的平方和sum函数是很容易理解的 70 00:03:55,550 --> 00:03:58,930 因为他们是在数学课上,你之前见过的功能。 71 00:03:58,930 --> 00:04:01,610 现在,让我们来看看在功能略有不同。 72 00:04:01,610 --> 00:04:04,620 返回一个值,而不是修改的状态。 73 00:04:04,620 --> 00:04:07,260 这是被称为具有一个副作用。 74 00:04:07,260 --> 00:04:10,750 在这个程序中,printf_fudd_style功能 75 00:04:10,750 --> 00:04:13,410 有一个返回类型,我们以前从未见过的,无效的。 76 00:04:13,410 --> 00:04:16,730 >> void是说,函数不返回任何东西。 77 00:04:16,730 --> 00:04:19,410 有没有void类型的变量, 78 00:04:19,410 --> 00:04:22,760 所以,如果你尝试从printf_fudd_style之类的函数返回的东西, 79 00:04:22,760 --> 00:04:24,290 编译器会骂你的。 80 00:04:24,290 --> 00:04:29,390 内部printf_fudd_style,我们可以看到,虽然功能仍执行任务, 81 00:04:29,390 --> 00:04:31,890 即所有R切换到WS, 82 00:04:31,890 --> 00:04:36,380 点的功能是修改字符串,然后把它打印出来,在屏幕上, 83 00:04:36,380 --> 00:04:39,400 程序状态的改变,而不是返回一个结果。 84 00:04:39,400 --> 00:04:43,700 使用这个函数是非常喜欢使用我们的平方和sum函数, 85 00:04:43,700 --> 00:04:46,950 但我们不将结果存储在变量或将其传递给另一个函数 86 00:04:46,950 --> 00:04:49,520 因为有没有结果可言。 87 00:04:49,520 --> 00:04:53,180 所以,当我们编译并运行我们的埃尔默法德语节目, 88 00:04:53,180 --> 00:04:56,970 你看,“你赖皮兔!”被转化的权利 89 00:04:56,970 --> 00:04:58,730 :“你wascally wabbit!” 90 00:04:58,730 --> 00:05:02,250 >> 最后,还有更多的功能值得讨论 91 00:05:02,250 --> 00:05:06,810 因为你已经用它在每一个你曾经写过C程序,主要。 92 00:05:06,810 --> 00:05:09,450 主要是就像任何其他的功能。 93 00:05:09,450 --> 00:05:13,580 它有一个返回类型,名称,参数列表,以及一个身体。 94 00:05:13,580 --> 00:05:16,110 的主要是永远的返回类型为int, 95 00:05:16,110 --> 00:05:19,120 使用int沟通的程序的状态,当它完成。 96 00:05:19,120 --> 00:05:23,360 >> 它是否运行成功,或者没有提前结束,因为一个错误吗? 97 00:05:23,360 --> 00:05:26,390 返回为0表示成功运行, 98 00:05:26,390 --> 00:05:29,510 并返回任何非零的值表示一个错误。 99 00:05:29,510 --> 00:05:31,950 根据你写的什么样的程序, 100 00:05:31,950 --> 00:05:34,960 不同的代码返回不同的错误,可以帮助 101 00:05:34,960 --> 00:05:37,210 的人使用你的程序。 102 00:05:37,210 --> 00:05:40,220 电源参数是一个更复杂一点。 103 00:05:40,220 --> 00:05:42,150 >> 参数列表可以是空的, 104 00:05:42,150 --> 00:05:45,330 我们指示写在括号之间的空白, 105 00:05:45,330 --> 00:05:50,220 列表可以有两个参数:一个int数组的char *。 106 00:05:50,220 --> 00:05:52,820 这些都是用来当你的程序拟使用 107 00:05:52,820 --> 00:05:56,490 在命令行传入的参数调用程序时。 108 00:05:56,490 --> 00:05:59,690 int参数通常被称为ARGC, 109 00:05:59,690 --> 00:06:03,300 和它的char *阵列的长度相等,被称为的argv。 110 00:06:03,300 --> 00:06:07,080 argv包含到程序的命令行参数传递。 111 00:06:07,080 --> 00:06:11,440 在另一个短期内,我们将讨论如何使用这些变量的更多细节。 112 00:06:11,440 --> 00:06:15,220 现在,您可以随时申报主要两种方式。 113 00:06:15,220 --> 00:06:19,410 我通常选择较短的方式写出来,不带任何参数,在可能的情况下。 114 00:06:19,410 --> 00:06:22,230 >> 现在,你知道如何编写功能, 115 00:06:22,230 --> 00:06:25,030 你对你的方式来开发更大,更复杂的程序。 116 00:06:25,030 --> 00:06:29,740 我的名字是Nate哈迪森。这是CS50。