gpt4 book ai didi

c++ - 初始化字符**

转载 作者:可可西里 更新时间:2023-11-01 15:49:07 24 4
gpt4 key购买 nike

我是 C++ 的新手。我正在尝试调用一个接受 char** 的函数:

bool func(char** a) {
//blablabla
}

所以它接收一个 C 字符串数组。我需要创建一个 char**,但没有任何效果。

char** a = char[255][255]; // error: type name is not allowed

char** a = new char[255][255]; // error: a value of type "char (*)[255]" cannot be used to initialize an entity of type "char **"

char a[][] = {"banana", "apple"};
char** b = &a; // error: a value of type "<error-type> (*)[2]" cannot be used to initialize an entity of type "char **"

最后我需要做的是:

char* a[] = {"banana", "apple"};

为什么前几个不起作用,为什么最后一个起作用?

提前致谢。

最佳答案

您的代码中有很多错误。

char** a = char[255][255]; // error: type name is not allowed

首先,这甚至不是有效的 C++(或 C)。也许你的意思是:

char a[255][255];

在任何情况下,永远记住,二维动态分配数组的类型不是**,而是(*)[N],这是非常不同的。

char** a = new char[255][255]; // error: a value of type "char (*)[255]" cannot be used to initialize an entity of type "char **"

您在评论中提供的错误消息完全解释了我之前所说的内容。

char a[][] = {"banana", "apple"};

在上面的代码中,变量a 的正确类型应该是char* a[]。同样,数组和指针(就类型而言)是非常不同的东西。 char 数组可能会退化为指针(如果 NULL 终止),但对于其余部分,除了显式强制转换外,您不能像现在这样使用指针和数组。

最后一个之所以有效,是因为正如我之前所说,char* [] 是 C 字符串数组的正确类型。

不管怎样,如果你只是做功课,学这些东西是可以的。但在以后使用 C++ 的开发中:尽量不要使用以 C- 开头的“功能”,例如 C 字符串、C 数组等。C++ 的标准库为您提供了 std::string std::arraystd::vector免费

如果您真的需要分配动态内存(使用newdelete,或者new[]delete[]) 请使用智能指针,例如std::shared_ptrstd::unique_ptr

关于c++ - 初始化字符**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18869282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com