【问题标题】:Declaring multidimensional Arrays: Pointer or Array Definiton声明多维数组:指针或数组定义
【发布时间】:2011-11-04 06:14:23
【问题描述】:

这样声明多维数组有什么区别:

int a[5][5];

或者这个

int* a[5];

?

哪个更好用?谢谢。

【问题讨论】:

标签: c arrays multidimensional-array


【解决方案1】:

两者都可以用于声明二维数组。

在第一种情况下,25 个 int 元素被分配在内存中的一个连续区域中。 在这种情况下,表达式a[i][j] 被编译器翻译成*(a + i*5 + j)

第二个分配了5个指向int的指针。您可以通过分配int 的向量并使这些指针指向这些向量来使其作为二维数组工作。 在这种情况下,a[i][j] 表示获取a[i] 指向的指针,然后查找该向量中的第 5 个元素。 IE。 a[i][j] 被翻译成*(a[i] + j)

请注意,在第二种情况下,行的长度不必相同。

【讨论】:

    【解决方案2】:

    int a[5][5]; 表示编译器应该分配足够的内存来存储 25 个整数,并将其视为一个名为a 的二维数组。

    int* a[5]; 表示编译器应该分配足够的内存来存储 5 个指向整数的指针,并将其视为一个名为 a 的指针数组。要将其实际用作二维数组,您必须分配更多内存并初始化这些指针以指向它。例如:

    int * a[5];
    for(int i = 0; i < 5; i++){ a[i] = malloc(sizeof(int) * 5); }
    

    在不了解您的要求的情况下,很难说哪个更适合您。第二个允许您有效地交换两行并且通常更灵活,但它需要更多的代码来分配和释放数据结构。

    【讨论】:

      【解决方案3】:
      • 您要声明的第一个二维数组(数组的数组)。
      • 第二个您要声明一个指向 int 的指针数组,该数组可用作多维数组。

      Is int *array[32] a pointer to an array of 32 ints, or an array of 32 pointers to int? Does it matter?

      看看http://www.cplusplus.com/doc/tutorial/arrays/ 声明多维数组

      【讨论】:

        【解决方案4】:

        苹果和橙子哪个好? 这个符号int a[ROWS][COLS]用于创建矩形二维数组,其维度在声明时是已知的。 当在 2D 数组声明时列数未知或列数在运行时可能变化或只想创建非矩形(锯齿状)数组时,使用此 int * a[ROWS] 表示法:

        1 2 3 4
        4 6
        7 1 1 1 5 6 7
        9
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-23
          • 1970-01-01
          • 1970-01-01
          • 2016-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多