Как я могу распределить память на массив динамически (2D)?Как создать динамически выделенный массив В C
int arr[n];
Если мне нужно больше или меньше памяти, динамическое распределение будет более suitable.How я могу сделать это в C?
Как я могу распределить память на массив динамически (2D)?Как создать динамически выделенный массив В C
int arr[n];
Если мне нужно больше или меньше памяти, динамическое распределение будет более suitable.How я могу сделать это в 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 + rows * columns». – alk
Вот как работает C, вы не можете динамически выделять «один 2D-массив». Поскольку статически выделенные 2D-массивы (mxn) фактически выделяются как 1D-массив длины m * n, а затем при обращении к этому массиву, например arr [i] [j], он обращается к положению памяти [i * n + j], но поскольку компилятор не знает о «n», когда массив динамически распределен, вы не можете назначить его как один массив, если вы не можете получить к нему доступ, как arr [i] [j] –
«* вы не можете динамически выделить «один 2D-массив» * «вы можете! :-) Вы могли бы взглянуть на мой ответ. – alk
Определить указатель на массив и выделенный столько памяти, что определяются, чтобы указать:
#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 в использовании поддерживает Влас один вариант, может сделать:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
size_t ROWS = 5;
size_t COLUMNS = 7;
...
https://www.google.com/search?q=c+dynamic+ массив – Biffen
Вы когда-нибудь слышали о ['malloc'] (http://en.cppreference.com/w/c/memory/malloc) и [' free'] (http://en.cppreference.com/w/c/память/бесплатно)? –