首页 > 解决方案 > 二维数组和指针表示

问题描述

1中的三个问题。

  1. 如果我有一个二维数组 -

    int array_name[num_rows][num_columns] 
    

    所以它由 num_rows 数组组成 - 每个数组都是大小 = num_columns 的数组。它使用指针数组的等效表示是-

    int* array_name[num_rows] 
    

    - 所以 [num_rows] 给出的索引仍然显示一维数组的数量 - 在某个地方使用 malloc 我们可以将每个一维数组的大小指定为 num_columns。那正确吗?我看到一些文字告诉

    int* array_name[num_columns] 
    

    在这种情况下,索引不会被切换吗?

  2. 对于 ID 数组,我动态指定大小为-

    int *p;
    p = (int*) malloc (size * sizeof(int))
    

    对于二维数组,我是否指定整个二维数组或 malloc 中一个一维数组的大小 -

    int*p [row_count];
    p = (int*) malloc (row_count * column_count * sizeof(int))
    

    或者

    p = (int*) malloc (column_count * sizeof(int))
    

    我认为应该是第二个,因为 p 是指向一维数组的指针,而 p+1 是指向一维数组的指针等。请澄清。

  3. 对于问题 2 - 如果 p 被定义为 - int **p;而不是 int * p[row_count] 如何使用 malloc 呢?我认为应该是——

    p = (int*) malloc (row_count * column_count * sizeof(int))
    

请更正、确认、改进。

标签: carrayspointersmultidimensional-array

解决方案


声明:

int *array_name[num_rows];

或者 :

int *array_name[num_columns];

是一样的。只有名称发生了变化,但您的变量仍然指的是行,因为 C 是主要行,因此您应该将其命名为行。

以下是如何分配二维数组:

int (*p)[column] = malloc (sizeof(int[row][column]);

可以分配 int ** 而 int [][] 是仅在函数范围内定义的临时数组。

不要忘记几乎每一行的末尾都需要一个分号。
您应该阅读此页面以获得对该主题的更完整解释


推荐阅读