欢迎来到天天文库
浏览记录
ID:38047408
大小:27.50 KB
页数:4页
时间:2019-05-24
《C#中使用指针》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、我想许多C程序员不愿意学习Java的原因就是Java不支持指针,但是现在类似于Java的C#却已经支持了指针,你可以使用unsafe关键字来告诉编译器下面的函数或者代码是不安全的。一旦你使用了unsafe,那么你就可以在unsafe区域中使用指针。 程序1 usingSystem; classnish { unsafestaticvoidIncrement(int*p) { //incrementtheintpointedtobyp *p=*p+1; } publicstaticvoidMain() { inti=1; //wepasstheaddresso
2、ftheinttothefunctionasitexpectsapointer unsafeIncrement(&i); //nowweprintoutthevalueofi Console.WriteLine(i); } } 当你运行这个程序,你将会看到输出结果2。这是因为你已经将变量i的地址送给了函数Increment来处理。变量i建立于栈中,&i则表示它在栈中的地址。这样在函数Increment中,p就指向i的地址,当我们对*p加1时,实际上是对变量i进行增加。 程序2 下面的程序将会让你更清楚的了解: usingSystem; classnish
3、 { unsafepublicstaticintMain() { intj=100; intk=100; Console.WriteLine("addressofj={0}andaddressofk={1}",(int)&j,(int)&k); Console.WriteLine("j={0}k={1}",j,k); int*p; p=&j; Console.WriteLine("pnowpointsto{0}",(int)p); *p=200; Console.WriteLine("j={0}k={1}",j,k); p=&k; Console.WriteLi
4、ne("pnowpointsto{0}",(int)p); *p=300; Console.WriteLine("j={0}k={1}",j,k); return0; } } 当运行上面的程序,我们将得到下面的结果。你会看到一些你熟悉的东东,下面的输出结果将会清楚的看到程序执行的过程: addressofj=1244312andaddressofk=1244308 j=100k=100 pnowpointsto1244312 j=200k=100 pnowpointsto1244308 j=200k=300 首先将变量的j的地址赋给p,这样当我们
5、改变*p时,j的值也将自动改变。接着我们将p指向变量k的地址,这时改变*p则是在改变k。 同样需要清楚的就是变量p也有自己的地址,下面的程序将会清楚的告诉您一切。 程序3 usingSystem; classnish { publicstaticvoidMain() { unsafe { inta=100; int*p; p=&a; Console.WriteLine("addressofais{0}",(int)&a); Console.WriteLine("pnowpointsto{0}",(int)p); Console.WriteLine("
6、addressofthepointervariablepis{0}",(int)&p); } } } 一运行上面的代码,我们将获得下面显示的输出。你将同样获得一些类似的输出,注意这里unsafe关键字的使用。 addressofais1244312 pnowpointsto1244312 addressofthepointervariablepis1244308 1244308是指针变量p的地址,而1244312则是指针p所指向的地址,我们使用*p来获得。 程序4 Okey。在最后的一个程序中,我将向大家介绍如何使用指针来操作字符串。在这个程序中存在一
7、个程序来将一段字符串通过异或运算进行编码解码的操作。如果您将一段字符串送入这个函数这个字符串将会被编码,如果您将一段已经编码的字符送入这个函数,这段字符串将会被解码。当这并不是一个安全的加密方法,我仅仅是想通过这个例子来演示一下指针的作用。 usingSystem; classnish { publicstaticvoidMain() { strings="CodeProjectiscool"; Console.W
此文档下载收益归作者所有