在c#中使用指针

时间:2021-10-30 00:56:54

如果想在c#中使用指针,首先对项目进行配置:在解决方案资源管理器中右击项目名选择属性(或在项目菜单中选择consoleApplication属性(consoleApplication为项名)),,在生成选项卡中 选中“允许不安全代码”,如下图:

在c#中使用指针

然后将有关指针,地址的操作放在unsafe语句块中。使用unsafe关键字是来告诉编译器下面的代码是不安全的。

unsafe关键字的使用:

(1)放在函数前,修饰函数,说明在函数内部或函数的形参涉及到指针操作

unsafe static void FastCopy(byte[] src, byte[] dst, int count)

{

// Unsafe context: can use pointers here.

}

不安全上下文的范围从参数列表扩展到方法的结尾,因此指针作为函数的参数时须使用unsafe关键字

unsafe static void FastCopy ( byte* ps, byte* pd, int count ) {...}

(2)将有关指针的操作放在由unsafe声明的不安全块中

unsafe

{   

// Unsafe context: can use pointers here. 

}

示例:

[csharp]  

 

using System;  

using System.Collections.Generic;  

using System.Linq;  

using System.Text;  

  

namespace ConsoleApplication1  

{    

    class Program  

    {  

  

          

        static void Main(string[] args)  

        {  

  

            int i = 1;  

            unsafe   

            {   

                Increment(&i); //将函数调用放在unsafe中是因为实参是指针类型  

            }  

              

            Console.WriteLine(i+"\n");  

  

            //演示如何使用指针来操作字符串  

            string s = "Code Project is cool";  

            Console.Write("the original string : ");  

            Console.WriteLine("{0}\n", s);  

  

            char[] b = new char[100];  

            s.CopyTo(0, b, 0, 20);//public void CopyTo (int sourceIndex,char[] destination,int destinationIndex,int count)  

            //将指定数目的字符从此实例中的指定位置复制到 Unicode 字符数组中的指定位置。  

  

            Console.Write("the encoded string : ");  

  

            unsafe   

            {  

                fixed (char* p = b)   

                {   

                    NEncodeDecode(p);   

                }  

            }  

            for (int t = 0; t < 20; t++)  

                Console.Write(b[t]);  

            Console.WriteLine("\n");  

  

            Console.Write("the decoded string : ");  

            unsafe  

            {   

                fixed (char* p = b)   

                {   

                    NEncodeDecode(p);   

                }   

            }  

            for (int t = 0; t < 20; t++)  

                Console.Write(b[t]);  

            Console.WriteLine();  

  

        }  

  

  

        unsafe public static void Increment(int* p)  

        {  

  

            *p = *p + 1;  

        }