0

我希望用户在程序启动时定义数组的大小,我目前有:

#define SIZE 10
typedef struct node{
    int data;
    struct node *next;
} node;

    struct ko {
    struct node *first;
    struct node *last;
} ;

struct ko array[SIZE];

这可行,但是,我想删除#define SIZE,并让 SIZE 成为用户定义的值,所以在主函数中我有:

int SIZE;
printf("enter array size");
scanf("%d", &SIZE);

我怎样才能将该值传递给数组?

编辑:现在我在 .h 文件中有以下内容:

    typedef struct node{
    int data;
    struct node *next;
    } node;

    struct ko {
    struct node *first;
    struct node *last;
    } ;

struct ko *array;
int size;

这在 main.c 文件中:

printf("size of array: ");
scanf("%d", &size);
array = malloc(sizeof(struct ko) * size);

这应该工作吗?它没有程序崩溃,但我不知道问题是在这里还是程序中的其他地方......

4

4 回答 4

5

而不是struct ko array[SIZE];动态分配它:

struct ko *array;
array = malloc(sizeof(struct ko) * SIZE);

完成后确保释放它:

free(array);
于 2013-05-22T09:36:43.613 回答
3

声明array为指针并使用以下方法动态分配所需的内存malloc

struct ko* array;

int SIZE;
printf("enter array size");
scanf("%d", &SIZE);

array = malloc(sizeof(struct ko) * SIZE);

// don't forget to free memory at the end
free(array);
于 2013-05-22T09:36:54.340 回答
0

您可以使用malloc()库函数使用动态内存分配:

struct ko *array = malloc(SIZE * sizeof *array);

请注意,在 C 中对变量使用全大写是非常罕见的,就样式而言,这非常令人困惑。

当您完成以这种方式分配的内存后,将指针传递给free()函数以取消分配内存:

free(array);
于 2013-05-22T09:37:09.943 回答
-1

数组的大小是在编译时定义的,C 不允许我们在运行时指定数组的大小。这称为静态内存分配。当我们处理的数据本质上是静态的时,这可能很有用。但不能总是处理静态数据。当我们必须存储本质上是动态的数据时,意味着数据大小在运行时会发生变化,静态内存分配可能会成为问题。

为了解决这个问题,我们可以使用动态内存分配。它允许我们在运行时定义大小。它在请求大小和类型的匿名位置为我们分配一个内存块。使用此内存块的唯一方法是通过指针。malloc() 函数用于动态内存分配,它返回一个指针,该指针可用于访问分配的位置。

例子-

假设我们正在处理整数类型的值,整数的个数不是固定的,是动态的。

使用 int 类型的数组来存储这些值不会有效率。

  int A[SIZE];

动态内存分配。

  int *A;
  A = (int*) malloc(SIZE * sizeof(int));

注意:类似的概念适用于结构。成为分配的动态内存可以是任何类型。

于 2013-05-22T12:17:25.347 回答