int n=1, m=1;
n++;
++m;
结果:n=1,m=2;
这个代码的执行结果没有问题,再请看以下这段代码:
int a=1, b=2, m=2, n=2;
(m=a<b)&&++n;
结果:n=3;
int a=1, b=2, m=2, n=2;
(m=a<b)&&n++;
结果:n=3;
为什么后面这两段代码,不管是n++还是++n,输出n的结果都是3呢,那不是和第一段代码的结果对不上么,请高人解答!!!
15 个解决方案
#1
int n=1, m=1;
n++; 执行完这句n=2。如果不是,要么是你代码中其它地方的问题,要么是你的开发环境出了问题。
n++; 执行完这句n=2。如果不是,要么是你代码中其它地方的问题,要么是你的开发环境出了问题。
#2
int n=1, m=1;
n++;
++m;
楼主是怎么得知n=1的啊,如果是紧接着cout<<n;n肯定是2,不然就是你在后边对n又有操作
n++;
++m;
楼主是怎么得知n=1的啊,如果是紧接着cout<<n;n肯定是2,不然就是你在后边对n又有操作
#3
int n=1, m=1;
n++;
++m;
结果:n=1,m=2;
这句执行完了 n也是等于2的
n++;
++m;
结果:n=1,m=2;
这句执行完了 n也是等于2的
#4
没错啊,
int a=1, b=2, m=2, n=2;
(m=a <b)&&n++;
m=(a<b)
==>m=1
1&&n++
==>n++
n=3
int a=1, b=2, m=2, n=2;
(m=a <b)&&n++;
m=(a<b)
==>m=1
1&&n++
==>n++
n=3
#5
第一段代码就有问题,n++是1,执行完n是2
#6
int n=1, m=1;
n++; //此处n=1
++m; //当程序到此n=2,m=2
n++; //此处n=1
++m; //当程序到此n=2,m=2
#7
两句代码不放在程序里面,怎么看结果啊。
n ++ 中的是后自增操作符,在操作完当前操作之后将n的值加1;
++ n 中的是前自增操作符。
例如:
int m = 1;
int n = 1;
cout << m ++ <<endl;
cout << ++ n << endl;
打出来的m是1,n是2,但是这个时候m和n的值都已经是2了;
如果是
int m = 1;
int n = 1;
m ++;
++ n;
cout << m << n << endl;
打印出来的m和n就都是2了。
n ++ 中的是后自增操作符,在操作完当前操作之后将n的值加1;
++ n 中的是前自增操作符。
例如:
int m = 1;
int n = 1;
cout << m ++ <<endl;
cout << ++ n << endl;
打出来的m是1,n是2,但是这个时候m和n的值都已经是2了;
如果是
int m = 1;
int n = 1;
m ++;
++ n;
cout << m << n << endl;
打印出来的m和n就都是2了。
#8
为什么后面这两段代码,不管是n++还是++n,输出n的结果都是3呢,那不是和第一段代码的结果对不上么,请高人解答!!!
-----------------------------------------------------------
C/C++标准规定,&&运算符的两个操作数都各有一个顺序点,在这两个顺序点到达之前,所有的副作用都会被完全求值,因此那两个n自加在&&运算符运算完之前都会自加一次。
-----------------------------------------------------------
C/C++标准规定,&&运算符的两个操作数都各有一个顺序点,在这两个顺序点到达之前,所有的副作用都会被完全求值,因此那两个n自加在&&运算符运算完之前都会自加一次。
#9
n = 2;
不管是++n还是n++,执行完这条语句都是3.
如果没有执行完毕,则还是2.
比如:
下面语句是分开的,不是一个函数里的。
不管是++n还是n++,执行完这条语句都是3.
如果没有执行完毕,则还是2.
比如:
下面语句是分开的,不是一个函数里的。
cout<<n++;//打印2;
cout<<++n;打印3
#10
n++和++n的作用均是让n自增1
所以无论是
int n = 1;
n++;
cout << n << endl;
还是
int n = 1;
++n;
cout << n << endl;
结果都一样输出2
只有在
int n = 1;
cout << n++ << endl; //先打印n 再把n加1 结果是1
和
int n = 1;
cout << ++n << endl; //先把n加1 再打印n 结果是2
所以无论是
int n = 1;
n++;
cout << n << endl;
还是
int n = 1;
++n;
cout << n << endl;
结果都一样输出2
只有在
int n = 1;
cout << n++ << endl; //先打印n 再把n加1 结果是1
和
int n = 1;
cout << ++n << endl; //先把n加1 再打印n 结果是2
#11
第一段代码的结果都是2的
#12
楼主被国内的C语言书毒害了。。。。
建议你看看国外翻译过来的C语言教程,看看什么是副作用(side effect),什么是顺序点(sequene point).搞清楚这2个概念,才能彻底搞清楚这些东西。
建议你看看国外翻译过来的C语言教程,看看什么是副作用(side effect),什么是顺序点(sequene point).搞清楚这2个概念,才能彻底搞清楚这些东西。
#13
在赋值语句中n++,++n一个事先赋值再加1,第二个是先加1再赋值
单独的一条语句n++,++n是一样的
for(int n-0;n<M;n++)
for(int n=0;n<M;++n)是等价的
或
int n=m=2;
++n;
m++;
cout<<n<<m;
结果都是3
单独的一条语句n++,++n是一样的
for(int n-0;n<M;n++)
for(int n=0;n<M;++n)是等价的
或
int n=m=2;
++n;
m++;
cout<<n<<m;
结果都是3
#14
不知道lz是如何知道n=1的。
#15
第一个就不对,应该输出 n=2,m=2
先说下前置++和后置++的区别 前置++是先对原值自加,后使用;后置++是先使用原值,后自加.
int a=1, b=2, m=2, n=2;
(m=a <b)&&n++; //逻辑与表达式是从左到右求解的,左m=a<b 为真,所以求解右表达式n++,先使用后自加,所以n=3
结果:n=3;
int a=1, b=2, m=2, n=2;
(m=a <b)&&++n; //先自加,后使用.
先说下前置++和后置++的区别 前置++是先对原值自加,后使用;后置++是先使用原值,后自加.
int a=1, b=2, m=2, n=2;
(m=a <b)&&n++; //逻辑与表达式是从左到右求解的,左m=a<b 为真,所以求解右表达式n++,先使用后自加,所以n=3
结果:n=3;
int a=1, b=2, m=2, n=2;
(m=a <b)&&++n; //先自加,后使用.
#1
int n=1, m=1;
n++; 执行完这句n=2。如果不是,要么是你代码中其它地方的问题,要么是你的开发环境出了问题。
n++; 执行完这句n=2。如果不是,要么是你代码中其它地方的问题,要么是你的开发环境出了问题。
#2
int n=1, m=1;
n++;
++m;
楼主是怎么得知n=1的啊,如果是紧接着cout<<n;n肯定是2,不然就是你在后边对n又有操作
n++;
++m;
楼主是怎么得知n=1的啊,如果是紧接着cout<<n;n肯定是2,不然就是你在后边对n又有操作
#3
int n=1, m=1;
n++;
++m;
结果:n=1,m=2;
这句执行完了 n也是等于2的
n++;
++m;
结果:n=1,m=2;
这句执行完了 n也是等于2的
#4
没错啊,
int a=1, b=2, m=2, n=2;
(m=a <b)&&n++;
m=(a<b)
==>m=1
1&&n++
==>n++
n=3
int a=1, b=2, m=2, n=2;
(m=a <b)&&n++;
m=(a<b)
==>m=1
1&&n++
==>n++
n=3
#5
第一段代码就有问题,n++是1,执行完n是2
#6
int n=1, m=1;
n++; //此处n=1
++m; //当程序到此n=2,m=2
n++; //此处n=1
++m; //当程序到此n=2,m=2
#7
两句代码不放在程序里面,怎么看结果啊。
n ++ 中的是后自增操作符,在操作完当前操作之后将n的值加1;
++ n 中的是前自增操作符。
例如:
int m = 1;
int n = 1;
cout << m ++ <<endl;
cout << ++ n << endl;
打出来的m是1,n是2,但是这个时候m和n的值都已经是2了;
如果是
int m = 1;
int n = 1;
m ++;
++ n;
cout << m << n << endl;
打印出来的m和n就都是2了。
n ++ 中的是后自增操作符,在操作完当前操作之后将n的值加1;
++ n 中的是前自增操作符。
例如:
int m = 1;
int n = 1;
cout << m ++ <<endl;
cout << ++ n << endl;
打出来的m是1,n是2,但是这个时候m和n的值都已经是2了;
如果是
int m = 1;
int n = 1;
m ++;
++ n;
cout << m << n << endl;
打印出来的m和n就都是2了。
#8
为什么后面这两段代码,不管是n++还是++n,输出n的结果都是3呢,那不是和第一段代码的结果对不上么,请高人解答!!!
-----------------------------------------------------------
C/C++标准规定,&&运算符的两个操作数都各有一个顺序点,在这两个顺序点到达之前,所有的副作用都会被完全求值,因此那两个n自加在&&运算符运算完之前都会自加一次。
-----------------------------------------------------------
C/C++标准规定,&&运算符的两个操作数都各有一个顺序点,在这两个顺序点到达之前,所有的副作用都会被完全求值,因此那两个n自加在&&运算符运算完之前都会自加一次。
#9
n = 2;
不管是++n还是n++,执行完这条语句都是3.
如果没有执行完毕,则还是2.
比如:
下面语句是分开的,不是一个函数里的。
不管是++n还是n++,执行完这条语句都是3.
如果没有执行完毕,则还是2.
比如:
下面语句是分开的,不是一个函数里的。
cout<<n++;//打印2;
cout<<++n;打印3
#10
n++和++n的作用均是让n自增1
所以无论是
int n = 1;
n++;
cout << n << endl;
还是
int n = 1;
++n;
cout << n << endl;
结果都一样输出2
只有在
int n = 1;
cout << n++ << endl; //先打印n 再把n加1 结果是1
和
int n = 1;
cout << ++n << endl; //先把n加1 再打印n 结果是2
所以无论是
int n = 1;
n++;
cout << n << endl;
还是
int n = 1;
++n;
cout << n << endl;
结果都一样输出2
只有在
int n = 1;
cout << n++ << endl; //先打印n 再把n加1 结果是1
和
int n = 1;
cout << ++n << endl; //先把n加1 再打印n 结果是2
#11
第一段代码的结果都是2的
#12
楼主被国内的C语言书毒害了。。。。
建议你看看国外翻译过来的C语言教程,看看什么是副作用(side effect),什么是顺序点(sequene point).搞清楚这2个概念,才能彻底搞清楚这些东西。
建议你看看国外翻译过来的C语言教程,看看什么是副作用(side effect),什么是顺序点(sequene point).搞清楚这2个概念,才能彻底搞清楚这些东西。
#13
在赋值语句中n++,++n一个事先赋值再加1,第二个是先加1再赋值
单独的一条语句n++,++n是一样的
for(int n-0;n<M;n++)
for(int n=0;n<M;++n)是等价的
或
int n=m=2;
++n;
m++;
cout<<n<<m;
结果都是3
单独的一条语句n++,++n是一样的
for(int n-0;n<M;n++)
for(int n=0;n<M;++n)是等价的
或
int n=m=2;
++n;
m++;
cout<<n<<m;
结果都是3
#14
不知道lz是如何知道n=1的。
#15
第一个就不对,应该输出 n=2,m=2
先说下前置++和后置++的区别 前置++是先对原值自加,后使用;后置++是先使用原值,后自加.
int a=1, b=2, m=2, n=2;
(m=a <b)&&n++; //逻辑与表达式是从左到右求解的,左m=a<b 为真,所以求解右表达式n++,先使用后自加,所以n=3
结果:n=3;
int a=1, b=2, m=2, n=2;
(m=a <b)&&++n; //先自加,后使用.
先说下前置++和后置++的区别 前置++是先对原值自加,后使用;后置++是先使用原值,后自加.
int a=1, b=2, m=2, n=2;
(m=a <b)&&n++; //逻辑与表达式是从左到右求解的,左m=a<b 为真,所以求解右表达式n++,先使用后自加,所以n=3
结果:n=3;
int a=1, b=2, m=2, n=2;
(m=a <b)&&++n; //先自加,后使用.