C++学习心得【1】----指针

来源:互联网 发布:手机免费刷赞软件 编辑:程序博客网 时间:2024/06/05 03:04

    学习心得不是论文,所以只记录了我学习过程中的一些想法,有些甚至与C++无关的。

       指针其实是C的精华了,由于C++ 是对C的改造,所以将C的精华保留了下来,总不能叫你去发展上海时,你竟然想把上海发展成农业型城市,还给定个目标说20**年粮食产量要达到全国各省市第一。

       关于指针,我的理解是一种存放地址的东西,本质上更像宾馆里的门口指示牌,如写着:2009AV年度大会在308房间举行,你只要去308这间大厅看下就知道有哪些明星参加了。如果写着309,那你就去309

指针偏移p = p+200,这个很像高速公路上的指示牌,如写着离上海还有200公里,绝对地址如北纬31度东经121度,你只要沿着高速(不要开错路)行驶200公里就到上海了,至于是到嘉定还是到松江,那你还得接着看路牌了。大部分教科书上都给指针画个箭头指向某块内存,给人的感觉好像指针是闹钟上的秒针,游离于内存之外的。就好像200公里处就开始竖牌子,这块路牌一直连续到上海,终点加个箭头,记住这还只是偏移,万一是藏沪高速,那你咋办?好办,办完后,申请新的吉尼斯纪录。

看一段代码再说:

 

输出(我的机器上): 

0013FF58

0013FF64

100

这表明内存0013FF58这块地方是块指示牌,上面写着什么呢?写着0012FF64,还是地址,

你跑过去一看,里面有100个美女,寻宝到此为止。具体地说:int型指示牌p放在0013FF58处,指示牌上写着0013FF64,int型变量n的地址,你去看一看。。。

       关于存储在计算机中的信息,程序必须记录三个基本属性:

信息存在哪里?

存的值是多少?

存储何种类型的信息?

这三条弄清楚了,你就不怕指针了,因为指针也是信息的一种,当然指针也不会怕你。

刚好借此解说一下以上代码:指示牌(指针)p存在0013FF58处,存的值是0013FF64,类型是int型,你不能将他指向double型。高速公路上的指示牌只说距某某城市还有多少公里,而不会写着向左拐房间308,那是宾馆型指示牌。变量n存在0013FF64,存的值是100,类型是int型。

 

关于const与指针,你将const理解为一把伞,指针p是大老婆,指针所指的对象(地址)是小老婆。现在你们三人在天安门前闲逛,突然天降大雨,假如你们只带了一把伞,这时候考验你的时候到了,你是想保护小老婆呢,还是想保护大老婆呢。当然旁人看的很清楚,伞在哪边,你的心就偏向哪边。const int * p 表明你偏向小老婆,心里祈祷她以后不要给你戴绿帽,int * const p表明你还是喜欢大老婆,当然也命令她不要给你戴绿帽。你要是两个都不偏,咋办?再买一把伞,或者把现有的一把伞也扔了,const int * const p 让大小老婆都不受伤害,她们也就不会给你带绿帽了;int * p让大小老婆都淋雨去吧,以后你也就不能怪她们给你戴绿帽子了,别忘了有些内存可是姓陈的。

 

关于多级指针,这个用过中国移动或者中国联通的朋友再熟悉不过了。只要你拨过10086或者1001,及就可以免费体验N级指针的乐趣了。

欢迎致电北京移动,中文服务请按1for english services , press 2.(假设你按了1)

话费查询及密码服务请按1,。。。。。。。。如需帮助,请按0.(你再接着按吧。。)

。。。。

没试过的可以试试,转人工服务挺不错的,MM声音很好听。到底是几级指针,多少地址偏移过去的,一试就清楚了。

      

关于动态内存分配,也要用到指针的。总不能买了一栋房子,但不知道地址,房产证也弄丢了,那不是让开发商爽死了,但我们假设世界上的房地产商狂讲道德,他拒绝再卖给其他人,等某一天你想找间房向陈总学摄影,结果正好找到了你买过的那间房,陈总从各方面都认为世界上不会再有第二间房比这间房更适合学摄影,因为整个北京就这间房子灯是灭的。你说那把它买下来吧,陈总说一定要。没想到售楼处说房子早卖出去了,买房的人给了钱就走了,其他什么也没留下,什么也没带走。你大骂了那个无名氏后,和售楼处说钱好商量,结果售楼处说我也没办法,开发商道德境界狂高。你无奈之下,指了指陈总,说:认不认识这个人啦?售楼处暴跳,说这人只会基本电脑操作,怎懂内存分配,自己电脑还人家给修呢!

       扯的太远了,无非是想说用new分配的内存,不用的时候要记得释放。假设你在堆上这样分配了一块内存int * p = new int; 你就可以用*p去开门进去学摄影了。当然指示牌p不一定在堆上,唯一肯定的是它在你手上。当你不学摄影时,觉得还是去皇马踢球比较好时,想把房子卖了,你告诉开发商,这房子我不要了,下次有人来学摄影,你要免费给他们用。开发商顿时有种心心相惜的感觉,没想到还能碰到一个道德如此高的人。开发商懂法的人,说签个合同吧,你去画了个押,写上delete p。这时你发现签合同的人还真不少,如此细心的你还发现,有人签的是delete [] p, 你心想看来也是个退房的。这时一群日本人签了个 int * p = new int [100], 你感叹一声,人家的产业就是发达啊。就在你感叹时,你发现售楼处的规则其实就贴在门口,规则也相当的完善,只买一间房的,退就只能退一间,买多间的,记得退多间。N年后当奥雷连诺上校站在行刑队面前,回想起父亲带他去参观冰块的那个遥远的下午时,你回想起了陈总的那句话:学摄影是你们这些玩设备的人永远也不会懂得的,你还记的学摄影的那间房是308,不知你有没有去看过,那里面可能什么都有,也可能什么都没有。后来你发现记住这些数字,万一晚上说梦话,说漏了咋办,你用p=NULL把它清空了,连上帝也佩服你的明智。你说p留着再次开房用,上帝很爽快,说没问题。

       还有不是用new在堆上分配的内存(new分配的内存在堆上),不要用delete,不过没事可以试试,但总有人跳出来抗议,你还是死了这条心吧。

      

       指针数组与数组指针,只知道概念,没实际用过,见面打个招呼。

              int *p[10]                            p是存储指针的数组

              int  (*p)[10]                         p是指向数组的指针

       指针函数与函数指针,只知道概念,没实际用过,见面打个招呼。

              int *f()                                 f是返回指针的函数

              int  (*f) ()                             f是指向函数的指针

       关于指针函数,可能没这说法,具体是返回指针的函数。就像大部分人都说姚明叶丽,很少说夜里要命。

 

原创粉丝点击