导航
  • 报考
  • 备考
  • 政策

报考

备考

复习资料

政策

行业动态

数据分析师课|数据分析师基础问题,关于串的分配存储结构,你会得到答案

环球网校·2020-02-19 16:27:10浏览34 收藏6

请输入下面的图形验证码

提交验证

预约成功

我知道了
摘要 在茫茫的数据发展长河中,人们慢慢掌握了数据处理的方法,其中重要的处理方法之一就是对数据的分析,所以出现了数据分析师这一处理数据的职业,有很多刚入职成为数据分析师的新人都会有数据分析的问题,今天就来讲讲串的分配存储结构的问题。

串的堆分配存储,其具体实现方式是采用动态数组存储字符串。

通常,编程语言会将程序占有的内存空间分成多个不同的区域,程序包含的数据会被分门别类并存储到对应的区域。拿 C 语言来说,程序会将内存分为 4 个区域,分别为堆区、栈区、数据区和代码区,其中的堆区是本节所关注的。

与其他区域不同,堆区的内存空间需要程序员手动使用 malloc 函数申请,并且在不用后要手动通过 free 函数将其释放。

C 语言中使用 malloc 函数最多的场景是给数组分配空间,这类数组称为动态数组。例如:

char * a = (char*)malloc(5*sizeof(char));

此行代码创建了一个动态数组 a,通过使用 malloc 申请了 5 个 char 类型大小的堆存储空间。

动态数组相比普通数组(静态数组)的优势是长度可变,换句话说,根据需要动态数组可额外申请更多的堆空间(使用 relloc 函数):

a = (char*)realloc(a, 10*sizeof(char));

通过使用这行串的分配存储结构代码,之前具有 5 个 char 型存储空间的动态数组,其容量扩大为可存储 10 个 char 型数据。

下面给大家举一个完整的示例,以便对串的堆分配存储有更清楚地认识。该程序可实现将两个串("data.bian" 和 "cheng.net")合并为一个串:

#include

#include

#include

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.net");

int lengthA1 = strlen(a1);//a1串的长度

int lengthA2 = strlen(a2);//a2串的长度

//尝试将合并的串存储在 a1 中,如果 a1 空间不够,则用realloc动态申请

if (lengthA1 < lengthA1 + lengthA2) {

a1 = (char*)realloc(a1, (lengthA1 + lengthA2+1) * sizeof(char));

}

//合并两个串到 a1 中

for (int i = lengthA1; i < lengthA1 + lengthA2; i++) {

a1[i] = a2[i - lengthA1];

}

//串的末尾要添加 \0,避免出错

a1[lengthA1 + lengthA2] = '\0';

printf("%s", a1);

//用完动态数组要立即释放

free(a1);

free(a2);

return 0;

}

串的分配存储结构程序运行结果:

data.biancheng.net

注意,程序中给 a1 和 a2 赋值时,使用了 strcpy 复制函数。这里不能直接用 a1 ="data.biancheng",程序编译会出错,报错信息为 "没有 malloc 的空间不能 free"。因为 strcpy 函数是将字符串复制到申请的存储空间中,而直接赋值是字符串存储在别的内存空间(本身是一个常量,放在数据区)中,更改了指针 a1 和 a2 的指向,也就是说,之前动态申请的存储空间虽然申请了,结果还没用呢就丢了。

以上就是有关于串的分配存储结构的相关内容,以及相应的解析,不论你是已经入职数据分析师岗位的新人,还是打算进入数据分析岗位的小白,以上的内容都或多或少会对大家有所帮助,环球网校的小编在这里祝大家的数据分析师职业道路顺利。

展开剩余
资料下载
历年真题
精选课程
老师直播

注册电脑版

版权所有©环球网校All Rights Reserved