串的堆分配存储结构
7个月前 (04-27)
串的堆分配存储,其具体实现方式是采用动态数组存储字符串。
通常,编程语言会将程序占有的内存空间分成多个不同的区域,程序包含的数据会被分门别类并存储到对应的区域。拿 C 语言来说,程序会将内存分为 4 个区域,分别为堆区、栈区、数据区和代码区,其中的堆区是本节所关注的。
与其他区域不同,堆区的内存空间需要程序员手动使用 malloc 函数申请,并且在不用后要手动通过 free 函数将其释放。
C 语言中使用 malloc 函数最多的场景是给数组分配空间,这类数组称为动态数组。例如:
动态数组相比普通数组(静态数组)的优势是长度可变,换句话说,根据需要动态数组可额外申请更多的堆空间(使用 relloc 函数):
通常,编程语言会将程序占有的内存空间分成多个不同的区域,程序包含的数据会被分门别类并存储到对应的区域。拿 C 语言来说,程序会将内存分为 4 个区域,分别为堆区、栈区、数据区和代码区,其中的堆区是本节所关注的。
与其他区域不同,堆区的内存空间需要程序员手动使用 malloc 函数申请,并且在不用后要手动通过 free 函数将其释放。
C 语言中使用 malloc 函数最多的场景是给数组分配空间,这类数组称为动态数组。例如:
此行代码创建了一个动态数组 a,通过使用 malloc 申请了 5 个 char 类型大小的堆存储空间。char * a = (char*)malloc(5*sizeof(char));
动态数组相比普通数组(静态数组)的优势是长度可变,换句话说,根据需要动态数组可额外申请更多的堆空间(使用 relloc 函数):
通过使用这行代码,之前具有 5 个 char 型存储空间的动态数组,其容量扩大为可存储 10 个 char 型数据。a = (char*)realloc(a, 10*sizeof(char));
下面给大家举一个完整的示例,以便对串的堆分配存储有更清楚地认识。该程序可实现将两个串("data.bian" 和 "cheng网站站点" rel="nofollow" /> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char * a1 = NULL; char * a2 = NULL; a1 = (char*)malloc(10 * sizeof(char)); strcpy(a1, "data.bian");//将字符串"data.bian"给a1 a2 = (char*)malloc(10 * sizeof(char)); strcpy(a2, "cheng网站站点" rel="nofollow" /> data.biancheng网站站点" rel="nofollow" />