我如何在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;
...
如何为数组动态分配内存(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;
...