realloc函数的作用是什么？请以markdown形式并列出两个使用情景说明。
user
```markdown
# realloc函数的作用

`realloc` 函数用于动态地调整内存分配的大小。换句话说，它可以在程序运行时改变之前通过 `malloc`、`calloc` 或 `realloc` 分配的内存块大小。如果新的大小大于原大小，新增部分的内容是不确定的；如果新的大小小于原大小，则超出新大小的部分将被释放。该函数的原型如下：

```c
void *realloc(void *ptr, size_t size);
```

- **参数**：
  - `ptr`：原内存块的指针，由 `malloc`、`calloc` 或 `realloc` 返回。
  - `size`：新的内存块大小（字节数）。

- **返回值**：
  - 成功：返回指向新分配内存的指针。
  - 失败：返回 `NULL`，但 `ptr` 所指向的原内存块内容保持不变。

## 使用情景

### 情景一：动态数组的扩展

假设你在程序中使用了一个动态数组来存储数据，初始时分配了一定的内存空间。但在程序执行过程中，发现需要存储更多的数据。这时可以使用 `realloc` 函数来扩展数组的空间，避免重新分配内存并复制原有数据，从而提高效率和减少性能损失。

### 情景二：内存的缩减

相反，如果在某个过程中，你发现已分配的内存中有部分不再需要，可以通过调用 `realloc` 函数来减小内存块的大小，释放不再使用的内存，从而优化内存使用。这是处理内存泄漏或优化内存管理的一个常见做法。
```
```
assistant