C#是否使用->;指针表示法? 我正在学习C语言,我熟悉C++结构指向符号 -> /COD>。我很好奇这是否会进入C#

C#是否使用->;指针表示法? 我正在学习C语言,我熟悉C++结构指向符号 -> /COD>。我很好奇这是否会进入C#,c#,c++,pointers,struct,C#,C++,Pointers,Struct,例如: someStruct->someAttribute += 1; C#不区分指针和引用。实际上,所有内容都是一个参考,因此使用。符号 编辑:正如下面的评论所指出的,它并没有那么简单。有引用类型和值类型。我上面的意思是,引用类型和指针类型之间没有区别 Edit2:不过如果你使用的是c#的不安全部分,显然会有!我今天学到了一些东西 虽然C#在幕后有指针,但它们对用户完全隐藏。你找不到一个去引用它的指针。您只有点符号来访问某些内容中的内容,无论原始内容是否为指针,都是隐藏的 你知道指针的

例如:

someStruct->someAttribute += 1;
C#不区分指针和引用。实际上,所有内容都是一个参考,因此使用。符号

编辑:正如下面的评论所指出的,它并没有那么简单。有引用类型和值类型。我上面的意思是,引用类型和指针类型之间没有区别

Edit2:不过如果你使用的是c#的不安全部分,显然会有!我今天学到了一些东西

虽然C#在幕后有指针,但它们对用户完全隐藏。你找不到一个去引用它的指针。您只有点符号来访问某些内容中的内容,无论原始内容是否为指针,都是隐藏的


你知道指针的唯一方法是通过引用而不是通过值传递的东西。

C#中有指针表示法,但只有在特殊情况下,使用
不安全的
关键字

使用
可以解除对常规对象的引用,但如果您想编写快速代码,可以固定数据(以避免垃圾收集器移动数据),从而“安全”地使用指针算法,然后可能需要
->

请参阅并详细介绍在C#中使用
->

它看起来像这样(从上一个链接):

有趣的是,C决定使用
而不是
->
来引用类引用所引用的对象的成员,因为语义更接近C的
->
操作符,而不是它的
操作符。例如,在C中,如果看到代码
a=b;a、 X=5
可以识别它正在写入某个结构
a
的字段
X
,该结构与
b
不同。相反,如果看到代码
a=b;a->X=5
a和
b所指向的结构的字段
X
中写入了代码。在C#中,所讨论的代码的行为将取决于
b
的类型是类还是结构


然而,如果C#对类和结构类型使用了不同的解引用操作符,那么将泛型添加到C#将是困难的,因为特定代码段可能在不知道所讨论的类型是结构还是类的情况下解引用接口约束类型的实例;如果结构使用与类不同的运算符,则不清楚应该使用哪种运算符。

这可能是在stackoverflow上。我从未见过对程序员的问题有如此大规模的上浮和错误的答案@比利,如果下面给出的答案是错误的,我相信如果你能给出一个正确的答案,我们都会很感激的。@Kristian:我对错误的投了低票,对正确的投了高票。他们中的一些人是对的——所有说“C#没有指针”或“C#没有向用户公开指针”的答案都错了110%。(事实上,麦克的答案是唯一正确的)并不是C#中的所有内容都是参考资料。基本类型的变量,如
int
不是引用,用
struct
声明的类型也不是引用。C#不区分指针和引用,并且您可以在不安全的上下文中使用指针:(1)
不安全
代码有指针。(2) 默认情况下,C#不通过引用传递(尽管,与Java不同,Java的这个神话更为前卫,如果程序员要求,它可以传递)——这意味着
void f(tx){x=…;}
将更改调用方的变量
x
,如果调用为
f(x)
。大多数东西都是参考资料,是的。但这些引用是按值传递的。你可以对这些引用背后的内容(例如对象成员)进行突变,但这不是“通过引用”的意思。只是一个注释:<代码>(*a)。b < /> >在C和C++中都等同于<代码> A- > B >代码。在C#经常使用的域中工作,并且从来没有任何理由使用
不安全的
代码或指针。我从来没有。@Carson63000:是的<代码>不安全的< /代码>可能只需要在你觉得你应该改写C++或C.的小算法的时候,在那些情况下,首先使用不安全的代码编写可能比用你的应用程序编写/集成/传输一段本地代码的麻烦。我大部分时间都是C++的人。我应该学习更多的C来获得更多的代表,因为我从来没有得到很多的选票在我的C++答案。
struct MyStruct 
{ 
    public long X; 
    public double D; 
}

unsafe static void foo() 
{
   var myStruct = new MyStruct(); 
   var pMyStruct = & myStruct;

   // access:

   (*pMyStruct).X = 18; 
   (*pMyStruct).D = 163.26;

   // or

   pMyStruct->X = 18; 
   pMyStruct->D = 163.26;
}