为什么在使用 `out` 指向指针时出现错误?

问题描述 投票:0回答:2

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

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
吗?

c# pointers
2个回答
1
投票

out
-关键字-与
ref
-关键字
一样,根本不会使用您提供给被调用函数的值。无论您是否提供值,它都只是分配值。因此,以下两个调用几乎相同,并且在执行
i
后将为
myFunction
产生完全相同的值:

int i = 0;
myFunction(out i);

int i = 1000;
myFunction(out i);

所以在这一行中

long x = (long)a;
a
根本没有价值。为了仅change传递给函数的值,您需要
ref
-关键字。


-1
投票

a,b 可能为空的问题之一

© www.soinside.com 2019 - 2024. All rights reserved.