在C语言中可以重新声明一个变量吗,或者至少可以用指针来做,我想重新声明一个数组中变量的大小,我想尝试的是不要问用户数组变量的大小,我做了一个例子,我甚至不知道它好不好,有人知道答案吗?
int i;
int main() {
int aUniverso[i];
int ii = 0;
printf("Put your numbers, if u wanna leave put a number - to '0' \n");
do{
printf("Posicion[%d]: ", i);
scanf("%d", &aUniverso[i]);
i++;
}
while (aUniverso[i] >= 0);
printf("U = {");
for (ii = 0; ii < i; ii++) {
printf("%d, ", aUniverso[ii]);
}
}
知道我是否可以在用户放置值时自动重新声明循环中变量的大小。
3条答案
按热度按时间ecr0jaav1#
在C语言中,简单地调整数组大小是不可能的。然而,有几个其他的选项可以解决这个问题:
溶液#1:定义所需数字的上限,并使数组达到该大小。
示例:
此程序具有以下行为:
然而,这种解决方案的缺点是
如果你不希望这些缺点,那么一个备选方案将是:
溶液#2:使用动态分配的数组并根据需要调整其大小。
此解决方案具有相同的行为:
这种解决方案的优点是只受可用内存的限制。然而,这种解决方案的缺点是每次调用该函数时,
realloc
可能必须将整个数组复制到新的内存位置。如果只有几个数字,则这应该不是问题。但是,如果有数千个甚至数百万个数字,则可能会出现问题。解决这个问题的一个方法是不仅在每次循环迭代中增加一个元素,而且在需要更多容量时将数组的大小增加一倍,这样就可以保证平均每个数字复制的次数不会超过
realloc
的两倍。下面是一个例子:
tquggr8v2#
如果你想要一个可以在运行时增长的数组,你可以使用
malloc
和realloc
的动态内存分配。下面的代码没有错误检查功能,这是留给读者的练习。为了避免过于频繁地重新分配,在必要的时候,我们将数组的大小增加一倍,在下面的例子中,我从
1
的计数开始,但是这很容易成为一个更大的数字,比如64
,在这种情况下,对于微不足道的测试输入,重新分配可能永远不会发生。bvpmtnay3#
本着业务方案的精神,另一项服务:
实际上,在这种情况下,从零开始递增存储值数组是一个次要的考虑因素,imho...在这里,我们看到将NULL指针传递到
realloc()
最初会导致它像malloc()
一样运行。