指针津逮--------浅谈从指针到“ref”

指针津逮--------浅谈从指针到“ref”

ID:46522123

大小:90.50 KB

页数:11页

时间:2019-11-24

指针津逮--------浅谈从指针到“ref”_第1页
指针津逮--------浅谈从指针到“ref”_第2页
指针津逮--------浅谈从指针到“ref”_第3页
指针津逮--------浅谈从指针到“ref”_第4页
指针津逮--------浅谈从指针到“ref”_第5页
资源描述:

《指针津逮--------浅谈从指针到“ref”》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、指针津逮-―浅谈从指针到“ref”指针津逮浅谈从指针到“ref”作者:小仙人凡刚刚接触C语言的人,最头疼的就是指针和链表了,别的变量里存放的都是“止而八经”的值,这指针呢,偏偏存的就是一地址,用起來还有声明和定义Z别,声明是有“*”号的,赋其地址值,定义时是无“*”号方可赋地址值。由于可以直接给其赋内存地址,初学者稍有不慎,这指针便如群魔乱舞,使编译者错误迭出。这时初学者不禁扼腕兴叹,要是没有指针多好!指针有什么用?然而指针被喻为C语言的精华,自有其必然Z处,例如:voidfun(inta)!a=20;}voidmain()!int

2、a=10;fun(a)}想让a变成20,若把a作为实参直接传进去经过fun(a)Z后出来a依IH是10。改变的只不过是形参的值,欲以此达到效果,无杲刻舟求剑。但是如果把a的地址传进去,即以指针作为实参,则可以达到这个效果:fun(int*p)!*p=20;}voidmain()inta=10;int*p=&a;fun(p);此时改变的,是存储10这个的空间里的值。可能有人会问,为什么不直接让a=20呢?在这里的确是可以,打个比方,为了打开一个A抽屉,有两种办法,一种是将A钥匙带在身上,需要是时眉••接找出该钥匙打开抽屉,取出所需的东

3、西,另一种办法是:为了安全起见,将该A钥匙放到另一个抽屉B中锁起来。如果需耍打开A抽屉,就得先找出B钥匙(这里说的钥匙就是指的地址,抽屉里的东西,就是*卩的值),打开B抽屉,取出A钥匙,再打开A抽屉,取出A抽屉中之物。(谭浩强C程序设计第三版220页)。我们有时需要用到函数,来达到我们特定的目的,有很多重复的交换,我们可以写成一个方法。那样可以削去人量的代码兀余,使我们的代码更洗练,史清晰。指针更人的好处在于一•个方法,只能冇一个返凹值。若想得到两个或多个返回值。这个时候,指针的作用就显现出来了。我们把想得到的结果以指针变量做为参数

4、的形式传递进去如:voidfun(int*a,int*b)就OK了。由于指针的这种操作起来的不方便,和管理起來的不安全性。后来的面向对象语言C#或者是JAVA都有童的屏蔽了指针。但程序员的工作,就是在内存上跳舞,不接触内存,能写出程序吗?故此.NET提供了一种安全的方式。不允许把一个地址直接赋给一个变量(但可以通过safe(){,,}在特左区域内运用指针,看这样子就知道,这种方法不被推荐),因此不会出现指针町以肆意乱指到内存的危险区域或保密区域,即便和内存打交道,也是通过“CLR”的托管,“CLR”可以口动回收存放内存地址信息的引用

5、变量,也可以检测某块堆空间当前是否有指向它的关联对彖(即“引用”),若此堆空间当前并未被指向,则白动冋收。溯本求源,在C#里,我们依稀能看到指针的影了,它,只是变换了一种出场的方式而已,我们熟知的对象名。UP“引用”说的就是指针了。它也是在内存的栈空间中,开辟出一块4个字节大小的空间,里头存放了堆空间中某一区域的首地址。意思亦是同一个“指针”指向了堆空间的特定区域。故此,他山Z石,对以攻玉,我们学好了C语言里的指针,对我们的C#编程也是大冇裨益的。下血就儿个实践小遇到的问题,阐述下我对指针的理解。为了方便讲解,新建一个windows

6、窗体应用程序项冃,在窗体上拖进一个textBoxl文本框和buttonl按钮。写一个User类:classUserprivatestringm_Name;publicstringName!get{returnmName;}set(m_Name=value;}}privatestringm_Pwd;publicstringPwd!get{returnm_Pwd;}set{m_Pwd=value;}}}在这个类里有公共字段:Name^)1Pwdo再写一个Users类,classUsers{privateListuserLis

7、t=newList();publicvoidAdd(Useruser)IuserList・Add(user);}publicUserthis[intindex]{get{returnuserList[index];}set{userList[index]=value;}publicintCount()!returnuserList.Count;}}其中有一个集合字段,现在在buttonl按钮的点击事件中,建立2个Usor用户的实例往集合中添加,代码如下:privatevoidbutton1_C1ick(objectsen

8、der,EventArgse){Useruser=newUser();Usersusers=newUsers();user.Name二”aaa";user.Pwcl="111”;users.Add(user);//user=newUs

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

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

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