假设我定义了两个数组,每个数组都有2个元素(用于理论目的):
char const *arr1[] = { "i", "j" };
char const *arr2[] = { "m", "n" };
Run Code Online (Sandbox Code Playgroud)
有没有办法定义一个包含这两个数组作为元素的多维数组?我在考虑以下内容,但我的编译器显示有关不兼容类型的警告:
char const *combine[][2] = { arr1, arr2 };
Run Code Online (Sandbox Code Playgroud)
它编译的唯一方法是让编译器将数组视为指针:
char const *const *combine[] = { arr1, arr2 };
Run Code Online (Sandbox Code Playgroud)
这真的是唯一的方法吗?或者我能以某种方式保留类型(在C++中,运行时类型信息会知道它是一个数组)并combine视为一个多维数组?我意识到它的工作原理是因为数组名称是一个const指针,但我只是想知道是否有办法在标准C/C++中做我所要求的而不是依赖于编译器扩展.也许我已经习惯了Python的列表,我可以在其中抛出任何东西......
不,首先,这个
char const *combine[][2] = { arr1, arr2 };
Run Code Online (Sandbox Code Playgroud)
无法工作,因为arr1并arr2不能用于初始化数组.但是这个:
char const *arr1[] = { "i", "j" };
char const *arr2[] = { "m", "n" };
char const *(*combine[])[2] = { &arr1, &arr2 };
Run Code Online (Sandbox Code Playgroud)
同样有效
char const *arr1[] = { "i", "j" };
char const *arr2[] = { "m", "n" };
char const *combine[][2] = { {"i", "j"}, {"m", "n"} };
Run Code Online (Sandbox Code Playgroud)