i=i++; --> i=++i;或者i++;
解决方案 »
- 主进程创建了子进程,怎么给子进程传递一个对象过去
- SqlParameter 能用在数据库的名称上吗?数据库名是不定的所以我想用参数的方式实现
- Winform的文件上传下载,如何做呢? 远程互联网上实现
- c#中的串口类与调用API,有什么区别,哪个好些??
- 如何用最简便的方法统计方法的执行时间
- 计算文件的MD5时,内存占用极大
- 如何在XP下通过编程修改计算机名?
- 把xmlschema 输出到一个textbox 不知道怎么做
- C#实现文件夹的同步
- 一个excel中有多个sheet表,这些表存在父子关系,如何将这些数据整理成XML文件?
- 使用label控件的问题????
- 想办一个网站,同时申请一个国际域名,不知道哪里的虚拟空间好?
i=i++;之后i究竟是什么值要看编译器实现
应该尽量避免这种用法
循环里 i=i++;
就相当于 i=i;
i还是等于0
如果循环里改为:
i=++i;
就是10了
就相当于 i=i;
????????????????????????
kao
不是吧
因为i的初始值是0,当运行到i++时,i的值其实已经变成1了。但是每次循环过后好像又回到i=0这句。所以加1等于1,然后又变成0。所以不论怎么加,到了i=0这句,总是等于0。
我以前都以为循环只对循环内的值作用,没想到上面的赋值代码也对循环有作用!
如果把i的初值改为任意数,它到最后仍然是原始值。如同上面代码的0一样!
谢谢这位大侠!请问为什么i=0会对循环产生作用。我以前看的任何书都没这样的说法,也没试过!
int i=0;
i=i++;
MessageBox.Show(i.ToString());
i还是等于零,这和c++里是不一样的
int i = 0;
i = i++;
printf("%d\n", i); // 输出1int i = 0;
i = i++;
Console.WriteLine(i); // 输出0K&R说C语言没有对这种情况特别规定,但是按照C99的规范是"所有对参数的副作用都必须在函数调用之前生效",所以i = i++对于C99来说应该等效为i++;i = i;但是C#表现的却不是如此,它相当于int j;i = j = i++;
i = i++;这种代码被编译为IL之后依然是这种结构,让CLR去处理了
可以看作是CLR的bug
for(k=0;k<10;k++)
i=i++;
Console.WriteLine(i);
Console.ReadLine();那k的值一直在变,,,,,,,,,,,,,,,
解释一下??????????????
i=i++;
這在你使用的編譯器中測試會有一個固定的答案,你也可以用你的邏輯去合理
化它。
但這樣的式子在 C/C++ 的規定裡,結果 i 是未定義的!
因為++優先權高於=,所以i++會先求值得0(i的舊值),主運算式成了i=0,
但子運算式i+=1和主運算式的 i=0誰會先計值確是未定的。
最後計值的運算式決定了最後i的值,所以結果可能為0或1。
因此
i=i++;
是個錯誤的寫法,不應該出現在你的程中!
对于C99来说应该等效为i = i;i++;
等价于
int i=0,k;
for(k=0;k<10;k++)
{i=i;i++;}
Console.WriteLine(i);
Console.ReadLine();
No1 i=i(i=0)
No2 int n=0
No3 n=i+1(i=0,n=1)
按照C#的语法,个人认为结果应该为10,但在.net中事实为0,我想应该是.net编译器的问题.
这样的代码还是不用的好.
i = i++;
假如是之前:i先加一再赋值,应该是等效i++
假如是之后:i赋值了再++,还是应该等效i++所以C99的i = i++等效于i++
但是C#的不是,CLR设计上有问题,嗯
看来你要打好基础i=i++
先引用i=0,后赋值加1
...其实只要看这一句嗯:But first, DO NOT WRITE THAT CODE!!!
(-:
for(k=0;k<10;k++)
i=i++;//这里是先把i赋给i,然后在自增1,这里的效果相当于i=i
Console.WriteLine(i);
Console.ReadLine();
在java中也是一样的 =0
因为i=i++;
i就是等于i,i++还没增加,,
增量运算符 (++) 将操作数加 1。增量运算符可以出现在操作数之前或操作数之后:++ var
var ++
其中: var
表示存储位置或属性或索引器的表达式。
备注
第一种形式是前缀增量操作。该操作的结果是操作数加 1 之后的值。第二种形式是后缀增量操作。该操作的结果是操作数加 1 之前的值。也就是说
i=i++;其实即等于i=i;的循环
c#
i= i >得出*式
i++ > i=1
i=0 * c
i = i
i = 0
i++ > i=1没有.net
谁试试j=i++ 看看是否是j=0 i=1