指针与动态数组

来源:互联网 发布:淘宝主图怎么弄吸引人 编辑:程序博客网 时间:2024/06/08 06:15

C语言中如何实现动态数组:

  1. 使用malloc()库函数(内存分配)来得到一个指向一大块内存的指针;
  2. 像引用数组一样引用这块内存

如果需要使数组有动态增长的能力,那就修改内存的总容量,直接在运行时在堆上分配数组的内存。这就用到库函数realloc(),它能够对一个现在的内存块大小进行重新分配(通常是实质扩大),同时不会丢失原先内存块的内容。

#include <arpa/inet.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h> // exit()int current_element = 0;int total_element = 4;char *dynamic = NULL;int add_element(char c) {    if (current_element == total_element) {        total_element *= 2;        char *test = (char *)realloc(dynamic, total_element);        if (test == NULL) {            printf("error\n");            return 0;        }        dynamic = test;    }    dynamic[current_element++] = c;    return 1;}int main(int argc, char **argv) {    dynamic = malloc(total_element);    dynamic[current_element++] = 'a';    dynamic[current_element++] = 'b';    dynamic[current_element++] = 'c';    char c = 'd';    if (add_element(c) == 1) {        for (int i = 0; i < current_element; ++i) {            printf("%c ", dynamic[i]);        }        printf("\n%c\n", dynamic[current_element-1]);        printf("%lu\n", sizeof(dynamic));    }    return 0;}

运行结果:

a b c d d8
0 0