如果想在c#中使用指针,首先对项目进行配置:在解决方案资源管理器中右击项目名选择属性(或在项目菜单中选择consoleApplication属性(consoleApplication为项名)),,在生成选项卡中 选中“允许不安全代码”,如下图:
然后将有关指针,地址的操作放在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;
}