C语言用realloc调整数组长度

  • Post category:C

当我们在使用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函数的应用,而且它们展示了对数组长度的动态调整和插入元素的功能。当然,我们还可以根据需要删除元素,具体的实现和这里的例子相似,在此不再赘述。