c++ - 从const char arr []转换为char **

标签 c++ casting constants function-declaration

所以我有以下情况:

void func(char ** a)
{
// Do some stuff...
}

int main() 
{
    const char * arr[2] = { "foo" };
    arr[1] = "bar";

    // I want to Cast the arr from const char ** to char **
    func(arr);
}

我认为func(reinterpret_cast<char**>(arr));是一种方法,但是我不知道这是否是最好的方法。

谢谢!

最佳答案

对于初学者,此声明

const char * arr[2] = "foo";

是不正确的。数组是集合,其元素的初始化程序应括在大括号中。
const char * arr[2] = { "foo" };

在表达式中使用的数组(极少数异常(exception))将转换为const char **类型的指针。

这个功能
void func(char ** a)
{
// Do some stuff...
}

不接受指向常量数据的指针。这意味着该函数可以更改指向的数据。反过来,这意味着您不应将数组传递给此函数。

您可以做的是动态分配一个数组数组,例如
char **p = new char *[2];

for ( size_t i = 0; i < 2; i++ )
{
    p[i] = new char[4];
}

strcpy( p[0], "foo" );
strcpy( p[1], "bar" );

func( p );

for ( size_t i = 0; i < 2; i++ )
{
    delete[] p[i];
}

delete[] p;

关于c++ - 从const char arr []转换为char **,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62480700/

相关文章:

c++ - 将 24 位有符号整数信号转换为 16 位有符号整数信号

c++ - 在 vector 大括号初始化中将 C 数组传递给结构初始值设定项

c++ - 从 C++ 调用 Win32 DLL

java - == Java中对象的运算符

swift - 需要澄清 Swift 中的 AnyObject

javascript - 常量的Polyfill(有点)?

list - 可选参数的默认值必须为常数

c++ - 在 C++ 中初始化结构中的 const 数组

c++ - 与 replaceChild 相关的内存泄漏

c++ - Eclipse C++ 控制台打印命令 linux