RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 646876
Accepted
BadCatss
BadCatss
Asked:2020-04-01 00:54:38 +0000 UTC2020-04-01 00:54:38 +0000 UTC 2020-04-01 00:54:38 +0000 UTC

C 中的指针和 C# 中的引用有什么区别?

  • 772

C 中的指针是否与 C# 中的引用类型相同?

c#
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    andreycha
    2020-04-01T01:08:59Z2020-04-01T01:08:59Z

    从概念上讲,是的。它们解决了指向一个对象的问题。但存在实施差异。

    指针包含一个地址。事实上,引用是一种抽象,没有说明它们的含义(尽管事实上,CLR 也在其中放置了一个地址)。

    C# 中的引用始终引用有效对象或等于null,而指针可以指向随机内存区域。(感谢@VladD 的评论)

    此外,C 指针是“静态”的,dotnet 中的对象可以由垃圾收集器重新定位,即 链接会改变它们的含义。

    另一个区别来自这个事实:在指针的情况下,可以安全地进行算术运算(例如,访问数组的第 i 个元素,拥有指向数组的指针并知道元素的大小),在在引用的情况下,事实并非如此。

    C#也有指针。它们相当于 C 中的指针。

    • 20
  2. Alexander Petrov
    2020-04-03T01:11:26Z2020-04-03T01:11:26Z

    让我用一个简单的例子来解释单词andreycha:

    指针包含一个地址。事实上,链接是一种抽象,并没有说明它们的含义。

    假设有一个人名叫 Vasily Pupkin,他住在 Lenina, 1。他的地址是一个指针。而“瓦夏之家”的概念就是一个参考。你可以说:“我们要去 Vasya 家里参加一个聚会”,但不要给出确切的地址。

    如果 Vasily 现在移动到 2 Lennon Street,那么地址将会改变,因此指针也应该改变。同时,链接“Vasya's house”将像以前一样有效。

    • 5
  3. Andrew_STOP_RU_AGRESSION_IN_UA
    2020-04-01T01:31:07Z2020-04-01T01:31:07Z

    我想对 andreycha 的回答发表评论,但后来我认为发布一个单独的答案会更好。

    先说C/C++中指针(pointer)的概念是一个对象在RAM中的地址,代表如下语法:

    int x;
    int *y = &x; // От любой переменной можно взять адрес при помощи операции взятия адреса "&". Эта операция возвращает указатель
    int z = *y; // Указатель можно разыменовать при помощи операции разыменовывания "*". Это операция возвращает тот объект, на который указывает указатель
    

    也就是说,名称前有一个星号。

    也有参考

    int x;
    int &y = x;
    int z = y;
    

    引用 +- 与指针相同,但具有不同的语法和其他一些重要差异。它们在那里协同工作,相得益彰:通过一个指针,你可以在C/C++中通过引用找出值。

    C# 也有指针和引用。指针语法是相同的星号,并且与 C/C++ 中的应用完全相同(这被认为是不安全代码,您需要在项目设置中选中“允许不安全代码”复选框并使用不安全方法修饰符)。也可以使用关键字ref而不是 & 隐式传递引用。尽管 ref 在 Sharpe 中的使用通常与在 C++ 中的 & 略有不同,但实现也相应不同。

    ref在夏普中的使用示例:

    public void SomeMethod(ref int a)
    {
        a = 5;
        //здесь а==5 как внутри метода так и извне
    }
    
    var a =1;
    
    SomeMethod(ref a);
    

    我不会说 C 中的指针/引用类似于 C# 中的引用类型。引入引用类型的概念只是所选实现的结果,而不是等效的. 直接类比只是上述指定指针/引用的方法。

    不加考虑地直接使用引用类型作为类比是不好的做法。例如,如果您知道传递的参数会在方法中发生变化,则List<T> someList需要添加ref List<T> someList,即使它已经是引用类型并且传递对引用类型的引用似乎没有任何意义。但这是有道理的,因为你将来可能会不经意地欺骗另一个程序员或你自己。

    在所有其他方面,我同意 andreycha 的回答和 VladD 的补充。那是:

    • C 指针是“静态”的,dotnet 中的对象可以由垃圾收集器重新定位,即 链接会改变它们的含义。
    • 并且 C# 中的引用永远不会“挂起”或指向随机内存区域,它始终引用有效对象或等于 null
    • -2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5