51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 1953|回复: 20

[基础教程] 值类型和引用类型,栈和堆的含义

[复制链接]
  • TA的每日心情
    耍酷
    8 小时前
  • 签到天数: 957 天

    连续签到: 2 天

    [LV.10]以坛为家III

    380

    主题

    1554

    帖子

    7294

    积分

    Rank: 9

    积分
    7294

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2016-9-28 15:07:30 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    本文主要是讨论栈和堆的含义,也就是讨论C#的两种类据类型值类型和引用类型;
      虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型。
      引用类型如:string,Object,class等总是在从托管堆上分配的,C#中new操作符返回对象的内存地址--也就是指向对象数据的内存地址。
      以下是值类型与引用类型的表:
       objectvalue.png

       我们来看下面一段代码:
        首先在类中声明一个class类,和一个struct结构,如图:
    exp1.png
      并使用在程序入口调用它们,如图
       clientExap1.png
       
        现在我们来看一看,它们在内存当中是如何存储的?
    ValueImage1.png
        从这张图可以看出,class(类)实例化出来的对象,指向了内存堆中分配的空间
                             struct(结构) 实例化出来的对象,是在内存栈中分配
       接下来,我们再来在上面的程序做如下修改:
        ValueImage2.png
        红框,代码定义一个class实例化对象s2,然后把对象s1赋值给s2
        蓝框,代码定义一个结构实例化对象r2,然后把对象r1赋值给r2
        那它们输出的结果是多少呢?请选择(   )
    A、  s1的值为:12     s2的值为222
           r1的值为:16     r2的值为666

    B、  s1的值为:12     s2的值为222
           r1的值为:666    r2的值为666

    C、  s1的值为:222    s2的值为222
           r1的值为:16     r2的值为666

    D、  s1的值为:222     s2的值为222
           r1的值为:666     r2的值为666
    游客,如果您要查看本帖隐藏内容请回复
    所以,值类型和引用类型的区别就是:
                1、它们存储的位置不一样
                2、如果是引用类型,当两个对象指向同一个地方,修改某一个的时候,其它对象的值会发生改变

    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
  • TA的每日心情
    害羞
    2019-9-30 09:12
  • 签到天数: 25 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    0

    主题

    24

    帖子

    555

    积分

    Rank: 3

    积分
    555
    发表于 2017-7-27 08:23:57 | 显示全部楼层

    RE: 值类型和引用类型,栈和堆的含义

    CCCCCCCCCCCCCCC

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    害羞
    2018-9-17 11:02
  • 签到天数: 25 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    13

    主题

    45

    帖子

    616

    积分

    Rank: 3

    积分
    616
    发表于 2018-3-20 14:40:29 | 显示全部楼层
    讲的很好。。。

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    害羞
    2018-7-9 09:18
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    0

    主题

    34

    帖子

    571

    积分

    Rank: 6Rank: 6

    积分
    571

    切换助手验证会员

    发表于 2019-8-28 11:46:44 | 显示全部楼层
    谢谢管理员的分享

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    点赞
    2019-8-12 09:21
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    5

    帖子

    22

    积分

    Rank: 1

    积分
    22
    发表于 2019-9-18 09:10:10 | 显示全部楼层
    学习了

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    点赞
    2019-8-12 09:21
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    5

    帖子

    22

    积分

    Rank: 1

    积分
    22
    发表于 2019-9-18 09:26:21 | 显示全部楼层
    为什么我换了string,同样引用类型,都指向同一个地方,修改某一个的时候,没有跟着一起改变啊

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    耍酷
    8 小时前
  • 签到天数: 957 天

    连续签到: 2 天

    [LV.10]以坛为家III

    380

    主题

    1554

    帖子

    7294

    积分

    Rank: 9

    积分
    7294

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

     楼主| 发表于 2019-9-18 09:33:02 | 显示全部楼层
    狼哥哥 发表于 2019-9-18 09:26
    为什么我换了string,同样引用类型,都指向同一个地方,修改某一个的时候,没有跟着一起改变啊 ...

    string是引用没有错,但是你修改string的值是在内存中重新分配新的空间,原来指向的数据就扔在内存里面了,原来的string指向的数据再无法定位,所以不停的使用string做字符串拼接和修改,会导致内存升高,尽量避免使用string改成StringBuilder即可。
    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
  • TA的每日心情
    开心
    2020-9-20 22:54
  • 签到天数: 335 天

    连续签到: 2 天

    [LV.8]以坛为家I

    7

    主题

    57

    帖子

    942

    积分

    Rank: 3

    积分
    942
    发表于 2019-10-9 19:59:11 | 显示全部楼层

    讲的很好。。。

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    开心
    2019-12-31 08:40
  • 签到天数: 20 天

    连续签到: 2 天

    [LV.4]偶尔看看III

    0

    主题

    15

    帖子

    42

    积分

    Rank: 1

    积分
    42
    发表于 2019-11-18 16:24:21 | 显示全部楼层
    66666666

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    开心
    2020-8-28 19:21
  • 签到天数: 126 天

    连续签到: 1 天

    [LV.7]常住居民III

    0

    主题

    12

    帖子

    243

    积分

    Rank: 2Rank: 2

    积分
    243

    切换助手验证会员

    发表于 2019-12-12 11:01:55 | 显示全部楼层
    感谢大佬的分享

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用

    有问题需要咨询站长?| 申请友链| 小黑屋| 手机版| Archiver|  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    CopyRight © 2015-2020 51Halcon机器视觉. Tencent Cloud X3.4.

    快速回复 返回顶部 返回列表