为什么我不能用foo(char*args [])做foo({"asd","asd1"})?

Ant*_*Ant 9 c++ function

我正在阅读C++ Primer,在第6.2节中它说:

"参数初始化的工作方式与变量初始化相同."

然而当我这样做时:

void foo(char* args[]) {return;}

int main() {

char* args[]={"asd","dsa"};  // ok.

foo({"asd","dsa"});          // error.

}
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Ant*_*Ant 4

正如 @TC 在评论中指出的,函数参数中的 args 被转换为 char** 因为函数不能将数组作为参数。既然你做不到

char **asd={"asd","dsa"}; 
Run Code Online (Sandbox Code Playgroud)

该代码是非法的。我的困惑来自于这样一个事实

char* args[]={"asd","dsa"};
char **asd=args;
Run Code Online (Sandbox Code Playgroud)

是合法的。