如何在C中创建动态分配的数组

时间:2016-10-26 05:24:48

标签: c arrays multidimensional-array dynamic-memory-allocation

如何动态地为数组分配内存(2D)?

    int arr[n];

如果我需要更多或更少的内存,动态分配会更合适。我怎么能用C做呢?

2 个答案:

答案 0 :(得分:2)

假设你有行数" r"列数" c",你可以这样做:

int **arr;
arr = malloc(r*sizeof(int*));
for(int i=0; i < r; i++)
{
    arr[i] = malloc(c*sizeof(int));
}

这会动态分配一个指向整数的指针数组,然后为每个指针分配整数数组。不要忘记在完成后删除动态分配的数组,在这种情况下,您应首先删除整数数组,然后删除指针数组:

for(int i=0; i < r; i++)
{
    free(arr[i]);
}
free(arr);

答案 1 :(得分:1)

定义一个指向数组的指针,并为其分配尽可能多的内存,以指向:

#include <stdlib.h>
#include <stdio.h>


#define ROWS (5)
#define COLUMNS (7)


int main(void)
{
  /* Define and initialise the pointer to the array. */
  int (*p)[ROWS][COLUMNS] = malloc(sizeof *p);

  if (NULL == p)
  {
    perror("malloc() failed");
    return EXIT_FAILURE;
  }

  /* Initialize the array's members. */
  {
    size_t r, c;

    for (r = 0; r < ROWS; ++r)
    {
      for (c = 0; c < COLUMNS; ++c)
      {
        (*p)[r][c] = r * c;
      }
    }
  }

  /* Print the array's members' values. */
  {
    size_t r, c;

    for (r = 0; r < ROWS; ++r)
    {
      for (c = 0; c < COLUMNS; ++c)
      {
        printf("array[%zu][%zu] = %d\n", r, c (*p)[r][c]);
      }
    }
  }

  /* Free the array. */

  free(p)

  return EXIT_SUCCESS;
}

如果使用的C实现支持VLA,则可以选择:

#include <stdlib.h>
#include <stdio.h>


int main(void)
{
  size_t ROWS = 5;
  size_t COLUMNS = 7;

  ...