黑马程序员技术交流社区

标题: 关于 i++ 与 ++i 的问题,求解 [打印本页]

作者: 冉亮    时间: 2012-10-17 22:16
标题: 关于 i++ 与 ++i 的问题,求解
本帖最后由 冉亮 于 2012-10-21 15:50 编辑

刚接触C#,今天在群里遇到个问题,挂上来求解:

int i = 0;
i = i++ + i++;     此处可理解为 i=0+1  吗?
Console.WriteLine(i);  // i=1
Console.ReadKey();
解得 i=1;

int i = 0;
i = ++i + ++i;    此处可理解为 i=1+2  吗?
Console.WriteLine(i);  // i=3
Console.ReadKey();
解得 i=3;

int i = 0;
i = i++ + ++i;    此处可理解为 i=0+2  吗?
Console.WriteLine(i); // i=2
Console.ReadKey();
解得 i=2;

还有它们在内存中是如何进行存储的?

先谢谢啦 ^_^


作者: 穆_升    时间: 2012-10-17 23:06
javascript:;javascript:;javascript:;这样估计更容易你理解了,lz理解挺对的,再附个表给你,int是值类型的.

i i .jpg (41.29 KB, 下载次数: 46)

i     i  .jpg

i i.jpg (33.32 KB, 下载次数: 54)

i     i.jpg

i i.jpg (28.93 KB, 下载次数: 54)

i       i.jpg

C#中的值类型和引用类型.jpg (19.62 KB, 下载次数: 54)

C#中的值类型和引用类型.jpg

作者: 颜晋南    时间: 2012-10-17 23:08
其实可以这么理解, 从左到右,哪个先出现就是哪个先用。
好比 i++  i先出现,那就是先利用 i 值,然后再i+1.
比如 i=1; b=i++;c=i; 这里b应该是1,c是2.
++i,就是说,先把i 加上1.然后再考虑 用它的事情。
比如 i=1;b=++i;这里b就是2了。
作者: 冉亮    时间: 2012-10-17 23:31
颜晋南 发表于 2012-10-17 23:08
其实可以这么理解, 从左到右,哪个先出现就是哪个先用。
好比 i++  i先出现,那就是先利用 i 值,然后再i+ ...

嗯,懂了,谢谢
作者: 笔墨伺候    时间: 2012-10-17 23:46
其实完全没必要去理解这些,很少用到,i++就行了,以前学c语言的时候,编译器对这两个东东貌似有点混淆
作者: 冉亮    时间: 2012-10-17 23:49
穆_升 发表于 2012-10-17 23:06
javascript:;javascript:;javascript:;这样估计更容易你理解了,lz理解挺对的,再附个表给你,int是值类型的. ...

同学你看过《C#图解教程》这本书吧?值类型数据存放在栈里,我想问的是:GC是在赋值完成后进行内存清除,还是待整个计算完成后再进行清除呢?
作者: 穆_升    时间: 2012-10-18 11:46
这么底层的问题,我只是在哪看到过,没往那么深去了解,建议你学全面后再去研究这个,有好处的,我学识太浅,这次帮不上你了哈!
作者: 曾家伟    时间: 2012-10-19 08:22
前自增取加1的值,后自增用原来本身的值。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2