从 const char arr[] 转换为 char **

Casting from const char arr[] to char **

所以我有以下情况:

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" };

在表达式中使用数组(极少数例外)被转换为 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;