我看到了在变量名前带有&,*和^的代码,但是在线搜索仅显示@的含义。 原来的3是什么意思?还有其他这样的人吗?
3个摘要:
static bool FName(array<double, 2> ^matrix)
pin_ptr<const double> p_pdMatrix = &matrix[0, 0];
sum += *(pdRoot + c + j * nSize)
中学:您将如何搜索诸如此类的简单运算符的含义?以上可能是重复的,但我的搜索没有发现任何内容。
答案 0 :(得分:3)
这些在C#中用于Unsafe Code and Pointers。它们的工作方式与C ++指针非常相似,但通常还需要将对象固定在内存中,以避免垃圾回收器移动它们。
它们是unary operators(即它们对值进行做某事),不像@
仅用于explicit parsing of reserved words as variable names。
// 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/
&
,*
和^
都可以用作逻辑运算符。例如:
// 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);
&
和*
可以与c#中的指针一起使用。
还用作取消引用运算符,该操作允许读取和写入指针。
一元&运算符返回其操作数的地址(需要不安全的上下文)。
在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。
这是证明:)