我只是想问一下,有没有办法在运行时在C中动态地为现有的元素数组分配内存?例如..如果我声明int arr [25];然后我将能够在我的数组中最多采取25个整数..但如果用户想要输入更多的整数怎么办...但我们事先不知道多少?另外,我不想通过分配类似int arr [500]的内容来浪费内存;只是为了确保用户没有超出我的阵列的上限:(我真的很困惑和悲伤,因为我无法找到解决方案.. C甚至支持这样的事情?如果没有,那么使用哪种编程语言会更容易解决这样的问题?PS->我是编程的新手,所以如果这是一个菜鸟问题,我很抱歉。:/
答案 0 :(得分:3)
你需要使用malloc()/ realloc()进行动态内存分配,并在完成后使用free()释放它。
int* a = malloc(25*sizeof(int));
//use a like array...a[0]...to a[24]
// realloacte if you need to grow it
a = realloc(a,50);
free(a);
上面的逻辑应该在C中使用。如果你写的是C ++,你应该使用STL std::vector<T>
答案 1 :(得分:2)
如果它是一个数组,你可能真的想要检查calloc()函数:
void* calloc (size_t num, size_t size);
可以像这样使用:
/* calloc example */
#include <stdio.h> /* printf, scanf, NULL */
#include <stdlib.h> /* calloc, exit, free */
int main ()
{
int i,n;
int * pData;
printf ("Amount of numbers to be entered: ");
scanf ("%d",&i);
pData = (int*) calloc (i,sizeof(int));
if (pData==NULL) exit (1);
for (n=0;n<i;n++)
{
printf ("Enter number #%d: ",n+1);
scanf ("%d",&pData[n]);
}
printf ("You have entered: ");
for (n=0;n<i;n++) printf ("%d ",pData[n]);
free (pData);
return 0;
}
如果您需要稍后调整数组大小,请查看realloc函数。 (是的,如果成功,它会保留原始数据)
答案 2 :(得分:1)
c++
中有一个您可能觉得有用的课程,称为vector
。您可以添加到向量的前面:myVector.push_front(myElement)
并添加到向量的末尾:myVector.push_back(myElement)
。如果此类功能对您非常重要,我建议您使用c++
vector
。
或者,您可以使用malloc()
中的c
函数在运行时请求特定数量的内存:char *five_chars = malloc(sizeof(char) * 5)
。当您完成内存时,请务必致电free(five_chars)
。