char** argv
和 char* argv[]
有什么区别?在 int main(int argc, char** argv)
和 int main(int argc, char* argv[])
?
他们是一样的吗?特别是第一部分没有 []
。
原文由 Simplicity 发布,翻译遵循 CC BY-SA 4.0 许可协议
char** argv
和 char* argv[]
有什么区别?在 int main(int argc, char** argv)
和 int main(int argc, char* argv[])
?
他们是一样的吗?特别是第一部分没有 []
。
原文由 Simplicity 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是我想出的一个简单示例,它有两个函数(Main_1,Main_2)与主函数采用相同的参数。
我希望这能把事情弄清楚..
#include <iostream>
void Main_1(int argc, char **argv)
{
for (int i = 0; i < argc; i++)
{
std::cout << *(argv + i) << std::endl;
}
}
void Main_2(int argc, char *argv[])
{
for (int i = 0; i < argc; i++)
{
std::cout << *(argv + i) << std::endl;
}
}
int main()
{
// character arrays with null terminators (0 or '\o')
char arg1[] = {'h', 'e', 'l', 'l', 'o', 0};
char arg2[] = {'h', 'o', 'w', 0};
char arg3[] = {'a', 'r', 'e', '\0'};
char arg4[] = {'y', 'o', 'u', '\n', '\0'};
// arguments count
int argc = 4;
// array of char pointers (point to each character array (arg1, arg2, arg3 and arg4)
char *argPtrs[] = {arg1, arg2, arg3, arg4};
// pointer to char pointer array (argPtrs)
char **argv = argPtrs;
Main_1(argc, argv);
Main_2(argc, argv);
// or
Main_1(argc, argPtrs);
Main_2(argc, argPtrs);
return 0;
}
输出 :
hello
how
are
you
hello
how
are
you
hello
how
are
you
hello
how
are
you
原文由 kavinda-ravishan 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
它们是完全等价的。
char *argv[]
must be read as array of pointers tochar
and an array argument is demoted to a pointer, so pointer to pointer tochar
, orchar **
.这在 C 中是相同的。