C++ int main (int argc, char *argv[]) - argv 是 c 风格的数组吗?

Posted

技术标签:

【中文标题】C++ int main (int argc, char *argv[]) - argv 是 c 风格的数组吗?【英文标题】:C++ int main (int argc, char *argv[]) - is argv a c style array? 【发布时间】:2014-01-10 19:16:35 【问题描述】:

以下内容无法编译:

int main (int argc, char *argv[]) 
    char arr[2][2];
    char **ptr = arr;
    return 0;

但以下是:

int main (int argc, char *argv[]) 
    char **ptr = argv;
    return 0;

因此,我会得出结论,argv 不是存储为单个内存块的 c 样式数组,而是某种指针数组。有人可以确认吗?

谢谢你和问候。

【问题讨论】:

如果argv 是一个数组数组,那么内部数组的大小将是类型的一部分(并且它们都必须是相同的大小)。 arr 衰减为指向char (*)[2] 类型数组的指针,这与指向char** 类型指针的指针不同。 【参考方案1】:

没错,argv 是指向指针数组的第一个元素的指针,每个指针(最后一个除外)又是指向给出相应命令的字符串中的第一个字符的指针行参数。

函数参数不能是数组。

【讨论】:

我删除了关于没有数组类型参数这样的东西的答案,因为即使这是一个东西,由于数组到指针的转换,它仍然可以工作。主要问题是内部类型是数组,而不是指针。

以上是关于C++ int main (int argc, char *argv[]) - argv 是 c 风格的数组吗?的主要内容,如果未能解决你的问题,请参考以下文章

int main(int argc,char **argv)[重复]

C语言 main 函数参数 main(int argc, char *argv[])

C语言 main 函数参数 main(int argc, char *argv[])

int main(int argc,char* argv[])浅析

如何在C++中解析命令行参数

int main(int argc,char *argv[]) 解释