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

How can i create dynamically allocated array In C

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

    int arr[n];

如果我需要更多或更少的内存,动态分配会更多suitable.How我可以用 C 做吗?

假设您有行数 "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);

定义一个指向数组的指针并分配它所定义指向的内存:

#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;

  ...