0

我在 ansi-C 中遇到了问题。我正在尝试在 C 中的数组上创建堆栈。但是我遇到了函数 pop 和 push 的问题 - 我不知道如何更改数组的大小。我想我可以使用函数 realloc() 以某种方式实现它,但我不知道如何。

任何人都可以帮忙吗?

4

1 回答 1

2

这是一个示例代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int *array = NULL;
    array = malloc(5*sizeof(*array));
    if (array == NULL)
    {
        printf("Memory allocation error\n");
        exit(1);
    }
    /* Now array has 5 entries, from 0 to 4 */
    array[0] = array[1] = array[2] = array[3] = array[4] = 0;
    array = realloc(array, 10*sizeof(*array));
    if (array == NULL)
    {
        printf("Memory allocation error\n");
        exit(1);
    }
    /* Now array has 10 entries, from 0 to 9 */
    array[5] = array[6] = array[7] = array[8] = array[9] = 0;
    free(array);
    array = NULL;
}

请注意,您不能更改从堆栈或数据(或 bss)段分配的数组的大小。您需要使用 malloc() 动态分配数组,以便以后可以使用 realloc()。

考虑在您未来的实现中,每次将新数据推送到堆栈时调用 realloc() 效率太低了。常规做法是通过至少将数组容量乘以 2 来扩展数组容量,并且除了当前大小之外还保留一个容量(数组可以容纳的最大元素数)。通常库从不缩小数组,而是在需要更多空间时扩展它。

于 2015-03-19T13:53:40.777 回答