当我们在使用C语言编写程序时,有时候我们需要动态地调整数组长度,这时候realloc就能够派上用场。realloc函数可以重新调整已分配内存区域的大小,我们可以利用这个函数去改变数组的大小。
realloc函数的原型如下:
void *realloc(void *ptr, size_t size);
其中,ptr是指向已分配内存区域的指针,size是重新调整后的内存大小。该函数会返回指向重新分配的内存区域的指针,如果重新分配失败,该函数会返回NULL。
下面是一个示例程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i;
int *p;
printf("请输入数组长度: ");
scanf("%d", &n);
p = (int*) malloc(n * sizeof(int)); // 动态分配内存,大小为n个int类型变量占用的内存大小
printf("请输入%d个整数: ", n);
for(i = 0; i < n; i++)
{
scanf("%d", p + i);
}
printf("原数组中的元素为: ");
for(i = 0; i < n; i++)
{
printf("%d ", *(p + i));
}
printf("\n");
n += 2; // 假设此时我们需要将数组长度加2
p = (int*) realloc(p, n * sizeof(int)); // 利用realloc重新分配内存,大小为(n+2)个int类型变量占用的内存大小(原先已分配内存的内容将复制到新分配的内存区域中)
printf("请输入新的%d个整数: ", n);
for(i = 0; i < n; i++)
{
scanf("%d", p + i);
}
printf("新数组中的元素为: ");
for(i = 0; i < n; i++)
{
printf("%d ", *(p + i));
}
printf("\n");
free(p); // 释放内存
return 0;
}
我们在该示例程序中,先输入一个整数n表示数组长度,然后动态分配内存空间,将用户输入的n个整数存储到该数组中,并输出该数组。此时,我们假设需要将数组长度加2,那么我们就可以使用realloc函数重新调整该数组的大小。在输入新的n个整数后,我们再一次输出该数组。最后,别忘记释放内存。
除此之外,我们还可以在数组中插入元素或删除元素。下面是插入元素的示例程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, x, pos;
int *p;
printf("请输入数组长度: ");
scanf("%d", &n);
p = (int*) malloc(n * sizeof(int));
printf("请输入%d个整数: ", n);
for(i = 0; i < n; i++)
{
scanf("%d", p + i);
}
printf("请输入要插入的整数: ");
scanf("%d", &x);
printf("请输入插入的位置: ");
scanf("%d", &pos);
n++; // 插入元素后,数组长度需要加1
p = (int*) realloc(p, n * sizeof(int)); // 利用realloc重新分配内存,大小为(n+2)个int类型变量占用的内存大小
// 插入操作
for(i = n - 1; i >= pos; i--)
{
*(p + i) = *(p + i - 1);
}
*(p + pos - 1) = x;
printf("插入%d后的数组为: ", x);
for(i = 0; i < n; i++)
{
printf("%d ", *(p + i));
}
printf("\n");
free(p);
return 0;
}
我们在该示例程序中,同样先输入一个整数n表示数组长度,然后动态分配内存空间,将用户输入的n个整数存储到该数组中,并输出该数组。此时,我们假设需要在数组的指定位置pos处插入一个元素x。为此,我们需要利用realloc函数重新调整该数组的大小(增加1),然后再将原先的元素向后移动一位,并将待插入元素x插入到pos位置。最后,我们再输出一下插入元素后的数组,别忘记释放内存。
上面的两个示例程序是对realloc函数的应用,而且它们展示了对数组长度的动态调整和插入元素的功能。当然,我们还可以根据需要删除元素,具体的实现和这里的例子相似,在此不再赘述。