在命令行参数中,为什么我们不能使用 string *arr 而不是 char **arr

In command line arguments why can't we use string *arr instead of char **arr

为什么这样做有效

int main(int argc, char **argv)
{       
        cout << argv[1] << "\n";
}

但不是这个

int main(int argc, string *argv)
{       
        cout << argv[1] << "\n";
}  

字符串不就是 char* 吗?为什么我们可以使用第一个而不能使用后者? char**string*

有什么区别

In command line arguments why can't we use string *arr instead of char **arr

如果您的编译器支持 main 的此类参数,您就可以。

但是语言标准不要求支持这些参数,而且据我所知没有编译器支持。所以,你不能使用它,因为你的编译器不支持它。

What is the difference between char** and string*

char** 是指向 char* 的指针。 char* 是指向 char 的指针。 char是一个函数类型,一个整数类型和一个表示编码窄字符的字符类型。

string* 是指向 string 的指针。全局命名空间中根本没有 string 这样的东西。 std::string 不是指针,也不是任何基本类型,而是 class 类型。它在标准库的头文件 <string> 中定义。

isn't a string just a char*?

不,不是。见上文。