码迷,mamicode.com
首页 > 编程语言 > 详细

CString数组内部的实现原理深入剖析

时间:2015-03-19 06:11:31      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

运用char 数组时会发现,char数组的元素的长度是固定了的。也即是说,一旦,数组创建完毕,就不可变了。那假如咱们想让数组元素的巨细能够改动,那么在MFC中 就运用CString数组,假如是纯C++环境中,运用string数组,都是能够到达需求的。bcn平台总代这篇文章只叙述CString数组的内部完成原 理,string的解说,将会独自解说一篇文章。趁便提一下,假如想运用数组能够动态添加元素个数,乃至想数组元素个数能够动态调整且元素巨细也能够动态 调整,那么就运用string或者CString作为元素的STL容器vector吧。

在MFC中运用CString数组代码如下:

CString str[] = {L"榜首串CString",L"第二串CString",L"第三串CString"};
int iSize3 = sizeof(str[0]);// - 4字节,榜首个CString目标的地址
int iSize4 = sizeof(str[1]);// - 4字节,第二个CString目标的地址
int iSize5 = sizeof(str[2]);// - 4字节,第三个CString目标的地址

/* - 调整元素的巨细 - */
str[0]=L"增大CString 的长度。。。。。。。";
str[1]=L"增大CString 的长度。。。。。。。";
str[2]=L"增大CString 的长度。。。。。。。";

 

CString数组完成原理分析:

0x0024F244   CString数组的开始地址
0x0024F244   CString数组的榜首个元素地址
0x0024F248   CString数组的第二个元素地址

0x0024F24C   CString数组的第三个元素地址


阐明:元素地址之间,相隔4个字节,标明元素巨细为4个字节,即一个指针变量的巨细。

CString数组:
数组榜首个元素的值:0x0039cbb8  (表明榜首个CString目标的地址)
数组第二个元素的值:0x0039cc20  (表明第二个CString目标的地址)
数组第三个元素的值:0x0039cc88  (表明第三个CString目标的地址)

        经过榜首个元素存储的CString目标的地址,经过内存能够看到,如下图所示的内存的数据:
        技术分享
        由于这儿的目标是顺序寄存的。所以,能够一起看到三个CString目标。但这不表明一定是这样,仅仅完成是这样的。CString数组只能做到数组中的 三个CString目标指针是存储在一块的就行了。诺亚娱乐平台然后经过数组中元素存储的CString目标的地址来找到对应的CString目标。因而,完成 CString的内容的动态调整,只需调整指针指向的CString目标即可。这样与数组自身脱离,就不会呈现规划瓶颈。咱们也能够和一般数组一样运用 CString数组,也完成了数组中元素的巨细自在的调整。这是在char数组无法完成的。
        当然,了解以上的原理后,咱们也能够完成一个能够调整元素巨细的数组。因而,这儿分析出来后,给咱们一个很大的启示,不仅给咱们学习运用CString数 组给了指导,关于平时开发也是一个启示,要点在于这个完成思路。经过指针直接完成元素的调整。mgm时时彩平台而元素巨细的调整即是内存的再分配问题了。这个不是啥难 点,运用C言语的内存重新分配函数即可做到。
        从图中能够看出,每一个CString目标都是以2c 7b 最初的。所以咱们能够明白的看到CString的三个目标的分界点。从右边的字符大致能够看出,这个即是CString目标了。然而咱们却没有看到CString目标中存储的字符串。这个咱们很简单想到,CString目标的数据是有一个缓冲区的,CString目标里仅仅存储这个缓冲区的地址算了,所以在此是看不到数据的。这儿咱们就不必重视这个缓冲区问题了。
        咱们在此阐明CString数组的内部完成方法。期望你能从中领会到CString数组的完成机制,伯乐娱乐平台对CString数组不再生疏,乃至十分深化的了解,从而在运用时灵敏自若。

CString数组内部的实现原理深入剖析

标签:

原文地址:http://www.cnblogs.com/bmxuhang/p/4349218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!