将 void 指针转换为 2D String 数组指针

Man*_*ame 2 c++ arrays pointers casting void-pointers

void*我正在使用一个库,它需要一个以指针作为参数的函数。我有一个 2D 字符串数组,我想通过该参数传递该数组并将其提取到函数内。我成功地将数组作为指针传递,但我不知道如何将该指针转换回我的数组。

这是我当前的代码:

String str_array[100][10];

int callback(void* data) {

  String* str_array_ptr[100][10] = (String* [100][10])data;

  (*str_array_ptr)[0][0] = "text";

  return 0;

}

void test() {
  callback(&str_array);
}
Run Code Online (Sandbox Code Playgroud)

但是,在编译时,我收到以下错误消息:

错误:ISO C++ 禁止转换为数组类型 'String* [100][10]' [-fpermissive]

PS:我正在尝试使用SQLite库的sqlite3_exec()函数并将“SELECT SQL 查询”的结果存储到二维字符串数组中。

SQLite C 接口 - 一步查询执行接口

joh*_*ohn 5

您不能将指针强制转换为数组。相反,您可以通过另一个指针访问数组。该指针的类型为String (*)[10]。像这样

String str_array[100][10];

int callback(void* data) { 

    String (*str_array_ptr)[10] = (String (*)[10])data;

    str_array_ptr[0][0] = "text"; // Note no '*'

    return 0;

}

void test() {
    callback(str_array); // Note no '&'
}
Run Code Online (Sandbox Code Playgroud)

创建指针(不需要使用 )的方式&和访问指针(不需要使用 )的方式*在代码中也是错误的。详细信息请参阅上面的代码。

这里的根本问题(也许是您误解的问题)是String *x[10];和之间的区别String (*x)[10];。第一种情况x是指向 10 个指针的数组String,第二种情况x是指向 10 个数组的指针String。这是您想要的第二个选项。