C#:变量前面的符号

时间:2018-10-11 05:03:47

标签: c#

我看到了在变量名前带有&,*和^的代码,但是在线搜索仅显示@的含义。 原来的3是什么意思?还有其他这样的人吗?

3个摘要:

static bool FName(array<double, 2> ^matrix)

pin_ptr<const double> p_pdMatrix = &matrix[0, 0];

sum += *(pdRoot + c + j * nSize)

中学:您将如何搜索诸如此类的简单运算符的含义?以上可能是重复的,但我的搜索没有发现任何内容。

2 个答案:

答案 0 :(得分:3)

这些在C#中用于Unsafe Code and Pointers。它们的工作方式与C ++指针非常相似,但通常还需要将对象固定在内存中,以避免垃圾回收器移动它们。
它们是unary operators(即它们对值进行做某事),不像@仅用于explicit parsing of reserved words as variable names

这是unsafe (C# Reference)

中的一个简单示例
// compile with: -unsafe

class UnsafeTest
{
   // Unsafe method: takes pointer to int:
   unsafe static void SquarePtrParam(int* p)
   {
      *p *= *p;
   }

   unsafe static void Main()
   {
      int i = 5;
      // Unsafe method: uses address-of operator (&):
      SquarePtrParam(&i);
      Console.WriteLine(i);
   }
}
// Output: 25

所有这些都具有作为安全运算符的附加含义-按位xor,按位and和乘法-但不太可能是这种情况-通常这种用法很清楚。

更仔细地查找-C#中不包含一元^,因此上述注释可能是正确的-您可能正在查看C++/CLI

答案 1 :(得分:1)

&*在c#中具有多种含义;用作运算符时包含双重含义。

有关如何将其用作运算符的信息,请访问https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/

选项1.逻辑运算符

&*^都可以用作逻辑运算符。例如:

    // Logical exclusive-OR


    // When one operand is true and the other is false, exclusive-OR 
    // returns True.
    bool b1 = true;
    bool b2 = false;
    Console.WriteLine(b1 ^ b2);
    // When both operands are false, exclusive-OR returns False.
    bool b1 = false;
    bool b2 = false;
    Console.WriteLine(b1 ^ b2);

    // When both operands are true, exclusive-OR returns False.
    bool b1 = true;
    bool b2 = true;
    Console.WriteLine(b1 ^ b2);

选项2。指针

&*可以与c#中的指针一起使用。

来自* Operator (C# Reference)

  

还用作取消引用运算符,该操作允许读取和写入指针。

来自& Operator (C# Reference)

  

一元&运算符返回其操作数的地址(需要不安全的上下文)。

Pointer types (C# Programming Guide)中有*&的一些示例

// Normal pointer to an object.
int[] a = new int[5] { 10, 20, 30, 40, 50 };
// Must be in unsafe code to use interior pointers.
unsafe
{
    // Must pin object on heap so that it doesn't move while using interior pointers.
    fixed (int* p = &a[0])
    {
        // p is pinned as well as object, so create another pointer to show incrementing it.
        int* p2 = p;
        Console.WriteLine(*p2);

        ...more here...

如何搜索:)

我只是将c# ^放入了我最喜欢的搜索引擎,然后进入了docos。

这是证明:)

enter image description here