新手请教一个关于n++的问题,急!!!

时间:2022-06-03 20:13:11
代码:
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。如果不是,要么是你代码中其它地方的问题,要么是你的开发环境出了问题。

#2


int n=1, m=1; 
n++; 
++m;
楼主是怎么得知n=1的啊,如果是紧接着cout<<n;n肯定是2,不然就是你在后边对n又有操作

#3


int n=1, m=1; 
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

#5


第一段代码就有问题,n++是1,执行完n是2

#6


int n=1, m=1; 
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了。

#8


为什么后面这两段代码,不管是n++还是++n,输出n的结果都是3呢,那不是和第一段代码的结果对不上么,请高人解答!!!
-----------------------------------------------------------
C/C++标准规定,&&运算符的两个操作数都各有一个顺序点,在这两个顺序点到达之前,所有的副作用都会被完全求值,因此那两个n自加在&&运算符运算完之前都会自加一次。

#9


n = 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

#11


第一段代码的结果都是2的

#12


楼主被国内的C语言书毒害了。。。。
建议你看看国外翻译过来的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

#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; //先自加,后使用.

#1


int n=1, m=1; 
n++; 执行完这句n=2。如果不是,要么是你代码中其它地方的问题,要么是你的开发环境出了问题。

#2


int n=1, m=1; 
n++; 
++m;
楼主是怎么得知n=1的啊,如果是紧接着cout<<n;n肯定是2,不然就是你在后边对n又有操作

#3


int n=1, m=1; 
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

#5


第一段代码就有问题,n++是1,执行完n是2

#6


int n=1, m=1; 
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了。

#8


为什么后面这两段代码,不管是n++还是++n,输出n的结果都是3呢,那不是和第一段代码的结果对不上么,请高人解答!!!
-----------------------------------------------------------
C/C++标准规定,&&运算符的两个操作数都各有一个顺序点,在这两个顺序点到达之前,所有的副作用都会被完全求值,因此那两个n自加在&&运算符运算完之前都会自加一次。

#9


n = 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

#11


第一段代码的结果都是2的

#12


楼主被国内的C语言书毒害了。。。。
建议你看看国外翻译过来的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

#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; //先自加,后使用.