Sim*_*ity 52 c++ program-entry-point arguments
char** argv和之间有什么区别char* argv[]?在int main(int argc, char** argv)和int main(int argc, char* argv[])?
它们是一样的吗?特别是第一部分没有[].
Fre*_*Foo 54
它们完全相同.char *argv[]必须作为指针数组读取,char并将数组参数降级为指针,因此指向指针的指针char,或char **.
这在C中是相同的.
Jam*_*ord 25
它们确实完全一样.
要记住的数组的黄金法则是:
"数组的名称是指向数组第一个元素的指针."
因此,如果您声明以下内容:
char text[] = "A string of characters.";
然后变量"text"是指向你刚刚声明的字符数组中第一个字符的指针.换句话说,"文本"是类型char *.当您使用[ index ] 访问数组的元素时,您实际在做的是将索引的偏移量添加到指向数组的第一个元素的指针,然后取消引用此新指针.因此,以下两行将两个变量初始化为't':
char thirdChar = text[3];
char thirdChar2 = *(text+3);
Run Code Online (Sandbox Code Playgroud)
使用方括号是一种由语言提供的便利性,使代码更具可读性.但是当你开始考虑更复杂的事情时,例如指针指针,这种方法非常重要.char** argv是char* argv[]因为在第二种情况下"数组的名称是指向数组中第一个元素的指针 ".
从这里你也应该能够看到为什么数组索引从0开始.指向第一个元素的指针是数组的变量名(再次是黄金法则)加上偏移量......没有!
我和我的一个朋友讨论过哪个更好用.使用char* argv[]符号,读者可能更清楚的是,这实际上是"字符指针数组",而不是char** argv可以读作"指向字符指针的指针" 的符号.我的观点是,后一种符号并没有向读者传达那么多信息.
很高兴知道它们是完全一样的,但是为了可读性,我认为如果意图是一个指针数组,那么char* argv[]符号表达得更清楚了.
对于问题的第一部分:
所以问题是指向类型 C 的指针和数组 C[] 是否是同一件事。它们根本不是一般的,但在签名中使用时它们是等效的。
换句话说,您的示例中没有区别,但重要的是要记住指针和数组之间的区别。
| 归档时间: |
|
| 查看次数: |
41495 次 |
| 最近记录: |