C - char\*\* argv 与 char\* argv\[\]

新手上路,请多包涵

char** argvchar* argv[] 有什么区别?在 int main(int argc, char** argv)int main(int argc, char* argv[])

他们是一样的吗?特别是第一部分没有 []

原文由 Simplicity 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 597
2 个回答

它们是完全等价的。 char *argv[] must be read as array of pointers to char and an array argument is demoted to a pointer, so pointer to pointer to char , or char ** .

这在 C 中是相同的。

原文由 Fred Foo 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题