首页 新闻 会员 周边

c#中能否将两个int类型指向同一片内存区域,其中一个值改变,另外一个随着改变?

0
悬赏园豆:30 [待解决问题]
int a = 0;
int b = 0;
a = 10;
b = a;
a = 15;

我们都知道int是值类型,非引用类型,因此当进行以上操作时,b最终值是10。

能否采取什么方法,让b的值随a改变呢,就像c++中的指针操作一样?

如果进行函数的ref参数引用,只有在调用函数的时候才能改变参数值,还是无法满足b随a改变的要求。

GeneHu的主页 GeneHu | 初学一级 | 园豆:172
提问于:2016-11-29 22:13
< >
分享
所有回答(8)
0

装箱,嘿嘿

~扎克伯格 | 园豆:1923 (小虾三级) | 2016-11-29 22:16
0

做成对象的属性,然后引用对象。

幻天芒 | 园豆:37175 (高人七级) | 2016-11-29 23:29
0

有,c#支持指针。

花飘水流兮 | 园豆:13560 (专家六级) | 2016-11-30 08:50
0

值类型本身是不能够做这种事的。

你说的指针其实也不算是两个int类型,因为其中一个是另一个的指针地址

unsafe
    {
        int a=10;
        int* b=&a;
        a=50;
  Console.WriteLine(*b);
    }

Daniel Cai | 园豆:10424 (专家六级) | 2016-11-30 09:02
0

先要把项目属性--生成--允许安全代码,然后通过指针来实现

GDOUJKZZ | 园豆:315 (菜鸟二级) | 2016-11-30 10:12
0

靠谱


pkyou | 园豆:98 (初学一级) | 2016-11-30 21:26
0

 

 只能用变通方法,上面有高手说了:

1. 改成引用类型;

2. 指针;

3. 封装成类的属性,在set 的访问器里对b进行赋值;

建议用 1或 3 ,用c# 还是写安全的托管代码吧;

如下把 a 封装成类的属性 A,添加访问器处理a与b的值, 在对 a 操作改成对属性 A 的操作;

private int a;
private int b;

public int A{
    get{return a;}
    set {a = value; b = value;}
}

 

 

Grissom007 | 园豆:215 (菜鸟二级) | 2016-12-07 00:23
0

C# 中可以有指针操作,需要放在unsafe中,这种资料很多;

使用方法稍微和C不同,但是原理相通,记得看你的开发环境配置,需要unsafe.

             int age = 0;
             int* p = &age;
             *p = 20;
             MessageBox.Show(p->ToString());

 

http://www.cnblogs.com/xiaotie/archive/2012/07/06/2579853.html

 

牧师/preacher | 园豆:500 (菜鸟二级) | 2017-03-02 13:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册