我想知道.NET技术中是否存在指针。如果是,是否有任何C#指针示例?
请指导我。
答案 0 :(得分:13)
答案 1 :(得分:5)
是的,指针存在。
引用实际上是指针,但它们在垃圾收集器知道它们的方式上是特殊的,并在它移动对象时更改它们。
指针可以用在不安全的代码中,但是你必须确保垃圾收集器不会移动你指向的东西。
示例:
string x = "asdf";
unsafe {
fixed (char* s = x) {
char* p = s;
for (int i = 0; i < 4; i++) {
Console.WriteLine(*p);
p++;
}
}
}
请注意,必须使用fixed
命令保护您希望通过指针访问的托管对象,并且编译器不会让您更改所获得的指针,因此如果你想要一个可更改的指针,你必须复制它。
您需要在项目设置中启用不安全的代码才能使用unsafe
关键字。
答案 2 :(得分:4)
是的,它们确实存在。
查看文档:
这些问题:
对不安全代码的一点介绍:
答案 3 :(得分:2)
是的,它们只是有限的,请查看MSDN上的this article
答案 4 :(得分:2)
是的,如果您执行unsafe
代码,则可以使用指针。有关详细信息,请参阅此MSDN部分:Unsafe Code and Pointers (C# Programming Guide)
答案 5 :(得分:1)
是的,他们存在。你可以写unsafe code。
答案 6 :(得分:1)
是的,他们这样做。您可以从this链接开始。
答案 7 :(得分:1)
亥,
我们可以在.net中使用的指针,但由于自动垃圾收集,框架不支持指针。因此,我们将其编写为非托管代码。要使用非托管代码,请转到project properties->build -> and enable allow unsafe code.
样品:
class UnsafeCode
{
//mark main as unsafe
unsafe public static void Main()
{
int count = 99;
int* pointer; //create an int pointer.
pointer = &count; //put address of count into pointer
Console.WriteLine( "Initial value of count is " + *pointer );
*pointer = 10; //assign 10 to count via pointer
Console.WriteLine( "New value of count is " + *pointer);
Console.ReadLine();
}
}
答案 8 :(得分:1)
我会仔细查看你打算做什么,看看你是否在尝试用C#编写C ++代码。很少有unsafe
代码是首选解决方案的实例。 C#的抽象级别高于C ++。因此,您可能需要考虑使用您正在使用的语言的习语。