realloc不太常用,所以在这里做个记录
void *realloc(void *ptr, size_t size);
这个函数蛮有意思,比方说,我申请了一段内存ptr, 如果发现不够用了,可以调用realloc函数,传入原先的ptr,然后定义增加的size,就可以返回到ptr覆盖原来的指针,这时候原来指针申请内存里面的数据能够保留,这点做的非常好。
所就得到了(这里以int为例)
ptr = (int *)realloc(ptr, size_t size);
题目是这样的:
给出的代码:
并没有按照参考答案来,因为我看参考答案也并不是说考虑得很周全。数组扩容的算法,应该可以去参考java里面ArrayList的源码,这里就简单做些实现,以求realloc接口的应用为主。
#include <stdio.h>
#include <stdlib.h>
#define DEFAULT 10
int main(int argc, const char *argv[])
{
int *array;
int count = 0;
int getNumber;
int i;
array = (int *)malloc(DEFAULT*sizeof(int));
if(array == NULL)
exit(EXIT_FAILURE);
while((scanf("%d ",&getNumber)==1 && getNumber!=EOF)){
count++;
if(count > 0)
*(array + count) = getNumber;
if(count>=DEFAULT){
array = (int *)realloc(array, DEFAULT+DEFAULT);
if(array == NULL)
exit(EXIT_FAILURE);
}
}
count++;
*array = count;
puts("");
for(i = 0 ; i < count; i++)
printf("%d ",*(array + i));
puts("");
return 0;
}