代码之家  ›  专栏  ›  技术社区  ›  Dustin

只编译为指针数组,而不是数组数组

c c++
  •  3
  • Dustin  · 技术社区  · 14 年前

    假设我定义了两个数组,每个数组有两个元素(用于理论目的):

    char const *arr1[] = { "i", "j" };
    char const *arr2[] = { "m", "n" };
    

    有没有一种方法可以定义一个多维数组,其中包含这两个数组作为元素?我在想如下问题,但我的编译器会显示关于不兼容类型的警告:

    char const *combine[][2] = { arr1, arr2 };
    

    它编译的唯一方法是让编译器将数组视为指针:

    char const *const *combine[] = { arr1, arr2 };
    

    这真的是唯一的方法吗?或者我可以保存某种类型(在C++中,运行时类型信息会知道它是一个数组) combine 作为多维数组?我意识到它是有效的,因为数组名称是一个const指针,但我只是想知道是否有一种方法来执行我在标准C/C++中所要求的,而不是依赖于编译器扩展。也许我对python的列表有点太习惯了,我可以在其中添加任何东西…

    1 回复  |  直到 14 年前
        1
  •  6
  •   jpalecek    14 年前

    不,首先,这个

    char const *combine[][2] = { arr1, arr2 };
    

    不能工作,因为 arr1 arr2 不能用于初始化数组。但这:

    char const *arr1[] = { "i", "j" };
    char const *arr2[] = { "m", "n" };
    
    char const *(*combine[])[2] = { &arr1, &arr2 };
    

    和这个一样有效

    char const *arr1[] = { "i", "j" };
    char const *arr2[] = { "m", "n" };
    
    char const *combine[][2] = { {"i", "j"}, {"m", "n"} };