>> [音乐播放]
>> DOUG LLOYD：好吧，让我们 说说命令行参数。
因此，到目前为止，在使用过程中很 多所有程序
可能已经开始 像this-- INT主要无效。
我们一直在收集 如果我们需要用户输入
在我们的节目，如 马里奥方案，例如，
在程序的提示。
修改我们没有必要 主要的声明，
因为里面，而不是我们主要的 只是说，你可以调用它来获得int类型。
如何大，你想要的金字塔呢？
或者你可以调用它来获得 float--多大变化
我应该输出给用户？
>> 还有另一种方式，虽然， 如果我们希望我们的用户
要能提供 数据我们的计划
在运行时，而不是当 程序运行，
一个微妙的区别，但 有时一个非常有用的，
我们需要声明的主要的一种新形式。
我们不能使用int主要无效的，如果我们想 在命令行收集其他数据
当用户运行该程序， 因此命令行参数。
>> 为了收集这些命令行 来自用户的参数，
改变你的声明 主要的样子this-- INT
主，开括号，INT ARGC，逗号， 字符串的argv，方括号，
然后打开大括号。
那么，是什么意思了吗？
好了，我们传递两个参数， 或参数，或者输入为主。
其中一个叫整数 的argc，另一个是什么？
这是一个字符串数组，对不对？
我们看到，方括号。
它是一个字符串数组。
它不是一个单独的字符串， 这是一个字符串数组。
而这两个参数，argc和argv， 让你知道哪些数据用户
在命令行提供 又有多少事情，他们
在命令行提供。
非常有用的东西的工作。
>> ARGC代表参数计数， 你应该知道，顺便说一下，
你可以拨打ARGC 不管你想要它。
你可以调用任何你想要的argv。
这些只是常规的名字 我们用于them--参数计数，
而我们将在第二次看到， 参数向量，argv的。
但是你没有给他们打电话 argc和argv，如果你不想，
但传统上，这就是我们要做的。
>> 所以无论如何，ARGC的参数计数。
这是一个整型变量，因此，作为 你可能会想到，如果我们有两件事
那我们将要寻找 出这些是什么类型的
多少东西 用户输入，ARGC是
要告诉我们多少 东西的用户输入。
所以，它给你一个数 命令行参数的用户
该程序执行时输入。
所以，如果你的程序是 运行点斜线贪婪，
和你贪婪的内 计划你的主要功能
有声明INT为主INT ARGC， 字符串argv的括号，然后
的argc在这种情况下是1。
现在请注意，我们不 指望有多少事
该程序名后用户输入。
程序名称本身计数 作为命令行参数。
>> 所以点斜线贪婪，在 这种情况下，的argc是其中之一。
如果用户键入斜线贪1024 CS50 在命令行，argc那样在这种情况下
将三种。
而且我们知道这是因为路 该字符串之间的分工
检测是是否 有一个空间，或制表符，
或类似的东西他们之间。
这样的白色空间的任何量，所谓， 值之间键入的命令行
表明有多少。
所以点斜线贪婪空间1024太空 CS50，的argc，在这种情况下，是3。
>> ARGV是参数向量。
矢量，顺便说一句，只是 另一种说法阵列，
而这是一个数组 存储字符串。
每个元素一个字符串，它是 琴弦用户实际上
键入的命令行 当程序被执行。
现在，作为是这种情况 与任何阵列，如果
从我们的讨论召回 阵列，argv的的第一个元素
总是会被发现 在argv的括号为零。
这是第一个索引 argv数组中。
使will--而事实上，这种意愿 永远是程序的名称，
将始终位于 argv的括号为零。
>> ARGV的最后一个元素总是被发现 在argv的括号ARGC减一。
你知道为什么吗？
还记得多少个元素 存在于这个数组中。
好吧，我们知道that--它 元素ARGC数量。
如果用户输入的三样东西在 命令行，的argc是三。
但是，因为在C，当我们的工作 与阵列，阵列的每个元素，
或者更确切地说，指标 阵列，从零开始。
如果我们有三个要素我们 阵列，我们有一个元件在argv的零，
在argv的一项所述的元件， 并且在argv的二元。
有一个在argv的任何元素 3，和大小的3的阵列。
所以这就是为什么在过去 argv的元素总能
将在ARGV广场发现 括号内ARGC减一。
>> 因此，让我们假设用户执行 贪婪的程序作为follows--
如果他们在命令行键入点 削减贪婪空间1024太空CS50，
而无论出于何种原因，我们已经 已经准备好我们的贪婪计划
要知道与这些工作 命令行参数。
我们以前不，当我们的工作 它为贪婪的问题，
但让我们说，我们现在已经修改 它让我们做的过程
以某种方式命令行参数。
在这种情况下，ARGV零 就是点斜线贪婪。
什么是argv的呢？
嗯，这是1024吧？
这为1024，但这里有一个 真正重要的distinction--
你还记得的argv的数据类型？
>> 它存储的字符串，对不对？
但它看起来像1024 是一个整数值。
这是一个非常重要的 区分，而实际上是
要成为东西，你 可能会遇到在以后的问题。
argv中一切 存储为一个字符串。
所以argv的一个人的内容是 串1,0，二，四，
由这四个字符。
这是因为如果用户键入 1，零，二，四
作为单独的字母或字符。
它不是整数1024， 所以你不能直接
它说INT 1000的工作，或 而INT x等于argv的一减24。
>> 直觉上，你可能会想到这一点 因为，好，这是1024减24，
所以x等于1000。
但实际上，这并非如此， 因为argv的一个是一个字符串。
字符串1024。
现在有一个功能，可以 用于字符串转换为整数。
我不会破坏它适合你 现在，但我敢肯定Zamyla
会很高兴地告诉你关于它的 演练为未来的问题。
但你也可以找到 问题like--借口
我，函数会 为此，在参考50，
如果你去参考指南 你可以找到一个函数，
将这种转换的。
但同样，在演练 对于未来的问题，
Zamyla将竭诚为 告诉你什么功能
它是将转换 串1024至1024的整数。
>> 好吧，让人感动的。
我们已经介绍了我们的ARGV零， 我们介绍的argv之一。
什么是argv中二号呢？
CS50。
一个人的可能 不言自明。
什么是argv中了三顶？
好了，我们真的不知道，对不对？
我们有大小的3的阵列， 这是多少个元素的用户
键入的命令行， 因此，如果我们去ARGV三，
我们现在超越 我们的数组的边界。
编译器将让我们做到这一点， 有没有直观的问题是，
但在实际方面是怎么回事 这种情况，我们真的不知道。
这要看是什么 位于内存中
的argv 3将被预期为。
因此，我们最终可能 越来越远逍遥法外。
以上不太可能，特别是当 你，而不是使用的argv正在处理
到任何其他阵列 这是在我们的计划，
我们很可能会吃亏 段错误。如此反复，
一定不要超越边界 你的阵列，尤其ARGV，
鉴于其较高的程度 在程序中的重要性。
>> 我是道格·劳埃德。
这是CS50。