我希望用户在程序启动时定义数组的大小,我目前有:
#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);
这应该有用吗?它没有程序崩溃,但我不知道是否有问题 在这里或在程序的其他地方...
答案 0 :(得分:5)
而不是struct ko array[SIZE];
,动态分配它:
struct ko *array;
array = malloc(sizeof(struct ko) * SIZE);
确保在完成后将其释放:
free(array);
答案 1 :(得分: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);
答案 2 :(得分:0)
您可以使用malloc()
库函数来使用动态内存分配:
struct ko *array = malloc(SIZE * sizeof *array);
请注意,在C中使用ALL CAPS作为变量是非常罕见的,在样式方面它非常混乱。
完成以这种方式分配的内存后,将指针传递给free()
函数以取消分配内存:
free(array);
答案 3 :(得分:-1)
数组的大小是在编译时定义的,C不允许我们在运行时指定数组的大小。这称为静态内存分配。当我们处理的数据本质上是静态的时,这可能很有用。但不能总是处理静态数据。当我们必须存储一个本质上是动态的数据意味着数据大小在运行时发生变化时,静态内存分配可能是个问题。
要解决此问题,我们可以使用动态内存分配。它允许我们在运行时定义大小。它在请求大小和类型的匿名位置为我们分配一个内存块。使用此内存块的唯一方法是使用指针。 malloc()函数用于动态内存分配,它返回一个指针,可用于访问分配的位置。
实施例 -
假设我们正在处理整数类型值,整数的数量不固定,是动态的。
使用int类型数组来存储这些值效率不高。
int A[SIZE];
动态内存分配。
int *A;
A = (int*) malloc(SIZE * sizeof(int));
注意:类似的概念适用于struct。成为分配的动态内存可以是任何类型。