内存拷贝函数的深入思考

内存拷贝函数的深入思考

ID:22557254

大小:113.57 KB

页数:7页

时间:2018-10-30

内存拷贝函数的深入思考_第1页
内存拷贝函数的深入思考_第2页
内存拷贝函数的深入思考_第3页
内存拷贝函数的深入思考_第4页
内存拷贝函数的深入思考_第5页
资源描述:

《内存拷贝函数的深入思考》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、编者按:我们知道,优秀的运动员除了fd身的天赋和努力之外,出色的教练必不可少。•个成功的企业除了拥柯出类拔萃的员工之外,同样需要一位出色的教练,那就是企业的CECL山此呵见,如果我们要想成为一位优秀的程序员,毫无疑问卓越的教练足致关巫要的。无数率实告诉我们,成功者之所以成功,足W为成功地选择导师的缘故。周立功公司之所以在一定程度上取得丁一些成功,绝对不足运气所为,除丫不断努力选拔优秀人才之外,且不惜代价投入人力和资本培训员工,更蜇耍的是有效的方法,从而保证了初学者的投入与产出的圾佳效果,让具备一定

2、潜质的应W大学生脱颖而出。优秀与平腐全在一念之间,关键在于你的首次择业而非就业,以好的习惯与平和的心态跟人们的第一份工作和第一位导师宵很大的关系。当下的利益固然番要,但从某种程度上來看,机会、环境、远景比眼前利益更重要,因为机会、环境和远景等因索会敁大限度地将你锻逍成为•一个在未來奋绝对竞争力的人才。同样是赚钱,你是否参与了公司山默默无闻迈向卓越的过程?你足否收获了更多的快乐?你是否找到了前所米冇的成就感?而很多人仅仅赚到了一些钱,幸福而不快乐。你将希银成为哪一类人,何去料从?圾初的选择尤其茁要。

3、本文是我们训练程序员的系列文章之一,仅供参考!这几年在全国巡回招聘应Mi毕业生的过程屮,经常会遇到这样的现象:宵些同学对A己的笔试比较满意,可圮坡后却得不到面试的机会,心里大为不解,颇冇“死不瞑目”的味道。那么问题到底出现在哪里呢?让我们來看一个例子,这足我们招聘过杓中•-道常见的题H。写一个函数,完成内存移动,并为芄写一个简单的测试用例來进行测试。够简单的吧?存的同学很快就写出了答案,详见程序洧单1与程序淸申.2。程序消单1V0.1版程序【cpp]viewplaincopyvoidMyMemMo

4、ve(char*dst,char*src,intcount){while(count--){*dst++=*src++;}}程序淸单2测试用例[cpp]viewplaincopyvoidTest(){charpl[256]=’’hello,worldcharp2[256]={0};MyMemMove(p2,pi,strlen(pi));printf(“%s'p2);客观地讲,祁比那些交白卷或者函数卢明都不会写的冏学米说,能够写出这段代码的M学己经非前不错了,至少在C诏言这门课程上己经达到丫现行髙校

5、的教育□标,但足离企业的川人獎求还存一定的距离。我们不妨将上面的程序称为V0.1版本,看看还卉没有什么地方可以改进。首先我们看看函数声明是否合理,V0.1版的程序将源地址和目的地址都用char*來表示,这样当然也没宵什么问题,但是让其他人使川起來却很不方便,假如现在要将count个连续的结构体对象移动到另外一个地方去,如釆耍使川vO.l的程序的话,正确的写法如下:MyMemMove((char*)dst,(char*)src,sizeof(TheStruct)*count)也就足说我们志要将结构体

6、指针强制转换成char*才能够正常工作,这样除了字符串以外其它的类型都不可避免地要进行指针强制转换,否则编译器就会呱呱叫,比如在VC++2(X)8K就会出现这样的错误:errorC2664:'MyMemMove•:cannotconvertparameter1fromTheStruct*'to*char**那么如何解决这个问题呢?其实很简申.,我们知道存一种特別的指针,任何类型的指针都可以对它赋伉,那就是void*,所以应该将源地址和H的地址都川void*來农示。当然函数体的内容也要作相应的改变,

7、这祥我们就得到了V0.2版的程序。程序淸单3V0.2版程序[cpp]viewplaincopy1.voidMyMemMove(void*dstjvoid*src,intcount)2.{3.while(count--)4.{5.*(char*)dst=*(char*)src;6.dst=(char*)dst+1;7.src=(char*)src+1;8.}【cpp]viewplaincopy[cpp]viewplaincopy杳的M亇讨能会问,这里面不赶还街指针强制转换叫?只不过赶换了地没错,强制

8、指针转换确实是从使用若的代码转移到丫库的代码里,但我们可以将MyMemMove理解为库,而将Test理解为使用希,审实上通过调粮之后的效果却有天壤之别,V0.1是-逸永劳,而V0.2是一劳永逸!还有几个细节需要注意,为了实现链式衣达式,我们应该将返回值也改为void*。此外,如果我们不小心将“*(char*)dst=*(char*)src;”写反了,写成“*(char*)src=*(char*)dst;”编译照样通过,而为了找出这个错误又得花费不少时间。注意到sir所指向的内界在这

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。