为什么我得到一个错误时使用' out '指针?



我只是想交换指针中的地址。你知道,试一试。所以我得到了可怜的代码:

unsafe class Test
{
static void Main()
{
int a = 1; int b = 2;
int* x = &a, y = &b;
Console.WriteLine($"{*x} and {*y}");
Swap(out x, out y);
Console.WriteLine($"{*x} and {*y}");
}
static void Swap(out int* a, out int* b)
{
long x = (long)a;
long y = (long)b;
x ^= y ^= x ^= y;
a = (int*)x; b = (int*)y;
}
}

可怕的错误:

Error    CS0269    Use of unassigned out parameter 'a'    ConsoleApp1
Error    CS0269    Use of unassigned out parameter 'b'    ConsoleApp1    

为什么?我不能使用关键字out的指针?

out-keyword- other asref-keyword,根本不会使用您提供给被调用函数的值。它只是赋值不管你是否提供了一个值。因此,以下两个调用几乎相同,并且在执行myFunction之后将为i产生完全相同的值:

int i = 0;
myFunction(out i);
int i = 1000;
myFunction(out i);

所以在这行long x = (long)a;a根本没有值,这就是为什么你会得到编译器错误。为了仅仅更改传递给函数的值,您需要ref-关键字:

static void Swap(ref int* a, ref int* b)
{
long x = (long)a; // a now has the value provided to the function
}

相关内容

  • 没有找到相关文章

最新更新