首页 新闻 会员 周边

地址和引用类型的区别

0
悬赏园豆:20 [已解决问题] 解决于 2015-05-20 09:23

看值类型和引用类型的区别,遇到了ref,据说是ref传递的是指针,而引用类型传递的是地址,希望大神能用这些原理给我讲解一下,网上指针和地址的文章很少。

代码小兵的成长的主页 代码小兵的成长 | 菜鸟二级 | 园豆:303
提问于:2015-05-19 01:22
< >
分享
最佳答案
0

对于引用类型,本身就是传递的指针,ref没有效果,如果你的示例不对。

ref是针对值类型的。将值类型的地址进行传递,效果就是如果改变了参数值,那么在调用方法外也是能看到更改的。

收获园豆:15
幻天芒 | 高人七级 |园豆:37175 | 2015-05-19 08:51

ref是有效果的,等refMethod操作完以后,会导致实参为null,从而引发错误。我理解的ref 传递时实参的地址,如果实参时值类型,那么ref 形参就是实参的地址,如果实参是引用类型,那么ref传递的是引用类型的地址的地址;我今晚把学习的博客写一下,您老麻烦瞄一眼看看我理解的对不对

代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-19 09:16

@代码小兵的成长: https://msdn.microsoft.com/zh-cn/library/s6938f28.aspx 这里有一篇关于ref传递引用类型的参考。

幻天芒 | 园豆:37175 (高人七级) | 2015-05-19 10:10

@幻天芒: 大神,看我写的博文对不对

http://www.cnblogs.com/zbqldyj/p/4480775.html

代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-20 02:35

@代码小兵的成长: 你能不能从基础的编程学起?比如找本大学的《C 语言程序设计》和《编译原理》看看。我看你连变量,形参等概念都没有。

Launcher | 园豆:45045 (高人七级) | 2015-05-20 09:26

@Launcher: 哎呀呀呀呀呀呀呀,大神别光批评啊,夸奖一下也行啊,至少我很努力的在学了啊 ,我天天都是晚上熬夜到晚上两三点呢,给点面子嘛

代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-20 10:37
其他回答(4)
0

你这基础太差了,从来都没明白函数申明中的参数到底是啥!

你的测试代码应该这样写:

public void CommonMethod(MyInt myInt)

{

   myInt = new MyInt{2,null};

}

public void RefMethod(ref MyInt myInt)

{

   myInt = new MyInt{2,null};
}

收获园豆:5
Launcher | 园豆:45045 (高人七级) | 2015-05-19 09:16

确实有点差,所以要学习嘛,不过我这个题目,我不认为你身边有多少工作五年以内的人能回答出来原理

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-19 09:24

我又不遍历,没看懂您老的潜台词啊,这种初始化方式和参数有啥关系啊,刚刚搜了几篇文档,没提到啊

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-19 09:35

大神详细描述一下呗 

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-19 09:35

@代码小兵的成长: 我就纳闷了,你的那些有疑问的概念和相关的代码都是从哪儿找的。我只能请你认真的看 MSDN https://msdn.microsoft.com/zh-cn/library/14akc2c7.aspx.

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-05-19 09:37

@Launcher: 看了您老给的地址了,也懂得了ref的理论,今天写了一篇博文,跪求大神支持,明天将我举例子的原理画出来,应该算是理解了ref

http://www.cnblogs.com/zbqldyj/p/4480775.html

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-20 02:38
0

好好努力,肯定会学的很好的 

wangYiYi | 园豆:13 (初学一级) | 2015-05-19 09:28

额,好吧,难道你们认为这个很简单吗

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-19 09:32

@代码小兵的成长: 这个倒不是的,知识是一点一点积累的,那句话是鼓励人的

支持(0) 反对(0) wangYiYi | 园豆:13 (初学一级) | 2015-05-19 09:34

@wangYiYi: 哈哈,好的,多谢您老了

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-19 09:36
0

看你叙述的就稀里糊涂的。一个 hold 了某个地址值 的变量,称为指针。我不知道你还纠结什么。

hoodlum1980 | 园豆:559 (小虾三级) | 2015-05-19 10:30

那你能告诉我我的代码的答案吗,为什么会有这种情况,帮忙解释一下吧大神,我现在是理解了,不过不知道对不对

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-19 11:25
0

哎哎哎…… 我给你说啊,其实吧,在.net中 完全可以Ref out这些 关键字的。Net中完全可以用引用类型来代替指针。Net中有ref,out,还有像struct,完全是为了 让C# 调用VC++的时候方便。你不用纠结这些的。

需要格局 | 园豆:2145 (老鸟四级) | 2015-05-19 11:30

主要是用来研究参数在内存中的运行机制,你说能不纠结不,不过现在已经自己理解了一些东西

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-05-19 14:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册