首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#是否使用->指针表示法?

C#是否使用->指针表示法?
EN

Stack Overflow用户
提问于 2011-06-20 02:35:46
回答 4查看 1.6K关注 0票数 9

我正在尝试学习C#,并且我熟悉C++结构体指向符号->。我很好奇这会不会影响到C#。

示例:

代码语言:javascript
复制
someStruct->someAttribute += 1;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-20 03:46:29

C#中有指针表示法,但只有在特殊情况下才使用unsafe关键字。

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

参见Pointer types (C# Programming Guide)this example中的一些内容,了解如何在C#中使用->

它看起来像这样(来自最后一个链接):

代码语言:javascript
复制
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;
}
票数 23
EN

Stack Overflow用户

发布于 2011-06-20 03:06:36

C#不区分指针和引用。实际上,所有东西都是一个引用,所以使用。符号。

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

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

票数 0
EN

Stack Overflow用户

发布于 2012-03-03 00:44:45

有趣的是,C#决定使用.而不是->来引用类引用所引用的对象的成员,因为其语义更接近C的->操作符,而不是.操作符。例如,在C中,如果看到a=b; a.X=5;代码,就会意识到它正在写入某个结构a的字段X,这是一个与b不同的结构。相反,如果看到a=b; a->X=5;代码,就会认识到它写入的是ab都指向的结构的字段X。在C#中,相关代码的行为将取决于b的类型是类还是结构。

但是,如果C#为类和结构类型使用了不同的解引用运算符,那么向C#添加泛型将会很困难,因为特定的代码片段可能会解引用接口约束类型的实例,而不知道所讨论的类型是结构还是类;如果结构使用了不同于类的运算符,则不清楚应该使用哪个运算符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6405212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档