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

objective-c中的指针数组

  •  1
  • Justin  · 技术社区  · 15 年前

    我被objective-c中的指针搞糊涂了。

    基本上我的代码中有很多静态数据。

    static int dataSet0[2][2] = {{0, 1}, {2, 3}};
    static int dataSet1[2][2] = {{4, 5}, {6, 7}};
    

    我想要一个数组来索引它。

    dataSets[0]; //Would give me dataSet0...
    

    数据集的类型应该是什么?我如何初始化它?

    4 回复  |  直到 13 年前
        1
  •  3
  •   dstnbrkr    15 年前

    虽然它在内存中的布局相同,但指向多维数组的指针与指向平面数组的指针不同。编译器必须将任何多维数组的[][]索引转换为平面数组索引。不能将两者混合,否则编译器的区别将丢失。您可以使用所有平面阵列:

      static int dataSet00[2] = {0,1};
      static int dataSet01[2] = {2,3};
      static int * dataSet0[2] = {dataSet00, dataSet01};
    
      static int dataSet10[2] = {4, 5};
      static int dataSet11[2] = {6, 7};
      static int * dataSet1[2] = {dataSet10, dataSet11};
    
      static int ** dataSets[2] = {dataSet0, dataSet1};
    

    或者一个大的多维数组:

      static int dataSets[2][2][2] = {{{0,1},{2,3}},{{4,5},{6,7}}};
    

    但不能两者的组合,除非您通过根据jon的建议声明一个特殊的数据类型来提示编译器。

        2
  •  3
  •   Jon Reid    15 年前

    指向多维数组的指针可能很棘手。typedef可以帮助:

    typedef int (*DataSetType)[2];
    DataSetType dataSets[] = { dataSet0, dataSet1 /* and so on*/ };
    
        3
  •  3
  •   Carl Norum    15 年前

    你可以用一个 NSPointerArray .

        4
  •  1
  •   Rob Lachlan    15 年前

    索引数组将是指向指向int的指针的数组。

    所以声明看起来像:

    int ** dataset[numOfDataSets] = {dataSet0, dataSet1, ...}
    

    记住objective-c是ansi-c的一个适当超集,这个问题尤其是关于c语言,真的。

    编辑:重要的是要记住,在C语言中,数组本质上只是指针,而二维数组是指针的指针。

    编辑2:我认为实际上我忽略了运算符优先级。应该是:

    int (** dataset)[numOfDataSets] = {dataSet0, dataSet1, ...}