注册 登录
编程论坛 C++教室

[求助]奇怪的 for(i=0; ; i=(++i)%n)

cpluslover 发布于 2007-04-05 01:24, 1153 次点击
for(i=0; ; i=(++i)%n)
与 for(i=0; ; i=(i++)%n)

不一样吗
为什么会不一样呢
是不是跟for语句的最后一部分执行原则有关呢

我用的可是VC编译器啊,反正在程序中这样写结果是不一样的
14 回复
#2
yushui2007-04-05 08:45

是i++和++i导致的不一样 i++是先%n再加1 ,++i是先加1后%n

#3
wfpb2007-04-05 09:59
'()'迷惑了你的眼睛,呵呵
#4
yuyunliuhen2007-04-05 12:15
以下是引用yushui在2007-4-5 8:45:56的发言:

是i++和++i导致的不一样 i++是先%n再加1 ,++i是先加1后%n

#5
帅得不敢出门2007-04-05 13:05
以下是引用cpluslover在2007-4-5 1:24:35的发言:
for(i=0; ; i=(++i)%n)
与 for(i=0; ; i=(i++)%n)

不一样吗
为什么会不一样呢
是不是跟for语句的最后一部分执行原则有关呢

我用的可是VC编译器啊,反正在程序中这样写结果是不一样的

很多时候这两个东东可以 混 用 但在这里不行 

#6
cpluslover2007-04-05 13:43
难道能穿透括号??
括号也不行吗?
#7
yushui2007-04-05 13:53
for循环是利用i++这样的来实现的,每一次执行的是(i++)%n或(++i)%n
#8
cpluslover2007-04-05 14:01
也就是说我写的那个i=在那里根本不起作用
每次都没有被执行对吗?
#9
yushui2007-04-05 14:03
我说错了 (i++)%n之后把值赋给了i ,都执行了的 只是习惯了说是i++了 呵呵
#10
dragonfly2007-04-05 14:18
i++和++i都是一个特殊表达式
#11
cpluslover2007-04-05 14:24

也就是说只要i++或者++i
之后,没有执行求余与赋值就去执行下面的内容了
执行完后才求余与赋值了吗


是不是这样呢
我感觉越来越晕了,如果不是这样的话,括号不是让i++与++i一样了吗

#12
wfpb2007-04-05 15:02
int s(int a)
{
return a;
}

void main()
{
int a=0;
//这里也有括号,也是穿透括号了,输出的两个不一样
// cout<<s(a++);
// cout<<s(++a);
}
#13
cpluslover2007-04-05 15:08
明白了,可能是写的编译程序不能识别括号
或者屏蔽了吧
呵呵谢谢大家了
#14
wfpb2007-04-05 15:23
这和括号没关系,你写过重载的++运算符吗?

(++i)和(i++)这个肯定比%n先执行,只是++i和i++也是一个函数,返回一个值
然后这个返回值参与%n运算,这样能理解了吗?
#15
cpluslover2007-04-05 15:58
还没有写过,不过你这一说,才感觉原来 是这样哦,明白了谢谢

[此贴子已经被作者于2007-4-5 15:59:19编辑过]


1