2016-01-21 401 views
0

就我所知,(如果是c中的初学者),只要用户知道用户将提供多少输入,就可以定义数组的大小。但是,如何根据输入数量来定义数组的大小?如何根据输入数量定义数组大小?

例如,如果我必须给出10个数字作为输入,那么我该如何声明一个数组,以便根据我的输入计数将其大小分配为10? (我不知道是否有可能,但我想知道)

+3

这就是所谓的内存分配,它不是初学者级别。如果你真的有兴趣,那么谷歌的malloc,calloc和realloc。但是,如果你真的是初学者,只是继续学习,那会晚一些。 –

回答

6

从C99开始,你可以使用变长数组。您可以随时使用size_t变量来声明它们的大小。

size_t n; 
printf("How many numbers would you like to enter?\n"); 
scanf("%zu", &n); 
int array[n]; 
for (size_t i = 0 ; i != n ; i++) { 
    printf("Enter number %zu: ", i+1); 
    scanf("%d", &array[i]); 
} 
printf("You entered: "); 
for (size_t i = 0 ; i != n ; i++) { 
    printf("%d ", array[i]); 
} 
printf("\n"); 

Demo.

注:此方法适用于比较小的阵列。如果您预计使用较大的阵列,请勿使用此方法,因为这可能会导致未定义的行为(自动存储区溢出)。相反,请使用mallocfree

1

我想你应该在C语言中使用指针概念。 you can go through these videos

虽然为1d数组分配内存动态指针非常方便。

+2

这应该是一个评论 – ForeverStudent

+0

@ForeverStudent:这是一个可能的问题的答案,因为他是C的初学者,所以如果我用指针回答他的查询编写C代码,他将很难理解单身去。我认为如果他了解指针并以这种方式理解它,那将是最好的:)。请纠正我的错误 –

+1

链接到外部资源可能会有帮助,但它不是一个答案 – ForeverStudent

1

你当然可以使用variable-length arrays(在C99介绍),但要注意,在最新的标准C11,这已经取得了可选功能。最新的编译器不是绑定未来支持此功能。如果您有兴趣,请检查this answer

最好的方法是利用指针和动态内存分配功能,如malloc()和家族。

实施例:(伪代码)

int * p = NULL; 
int input = -1; 
scanf("%d", &input); 
p = malloc(input * sizeof*p); 
if (p) { ..... 

这里,可以控制使用input变量值的分配大小。

P.S-指针不是数组,当然,但我相信,对于大多数情况下,这将用于此目的。

相关问题