如何动态地为数组分配内存(2D)?
int arr[n];
如果我需要更多或更少的内存,动态分配会更合适。我怎么能用C做呢?
答案 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;
...