黑马程序员技术交流社区

标题: a++与++a中的问题? [打印本页]

作者: 远人    时间: 2014-3-20 17:09
标题: a++与++a中的问题?
本帖最后由 远人 于 2014-3-21 08:48 编辑

请问,如下代码中
#include <stdio.h>

int main(int argc, const char * argv[])
{
    int b;
    int a = 10;
    b = (++a) + (a++);
   
    printf("b =%d\n",b);
    printf("a =%d\n",a);
    return 0;
}
输出结果b=22,a = 12。   
b=22我理解,但是为什么a的值a = 12而不是a = 10,这个程序中并没有再次定义a的值,这是什么原理?
作者: 悟中生有    时间: 2014-3-20 17:18
++a和a++相当于把a的值在a=10的基础上做了两次加1,所以a的值就是12了。另外,++a是先自加1再赋值,a++是先赋值再自加1
作者: 氯化钾    时间: 2014-3-20 17:21
本帖最后由 氯化钾 于 2014-3-20 17:22 编辑

朋友 老师当时交给我我们的一句话 ++在前 就是 整个这条语句执行前先执行的自加一 而++在后 就是语句执行后自加一 很好理解吧:lol  ++ 的含义是大体上 a = a+1;
作者: 周宇华    时间: 2014-3-20 18:02
b = (++a) + (a++);
分开来看就相当于下面三句语句:
a=a+1;//a=11
b=a+a;//b=22
a=a+1;//a=12
作者: keycola    时间: 2014-3-20 18:08
  1. 请问,如下代码中
  2. #include <stdio.h>

  3. int main(int argc, const char * argv[])
  4. {
  5.     int b;
  6.     int a = 10;
  7.     <font color="Red">b = (++a) + (a++);</font>
  8.    
  9.     printf("b =%d\n",b);
  10.     printf("a =%d\n",a);
  11.     return 0;
  12. }
  13. 输出结果b=22,a = 12。   
  14. b=22我理解,但是<font color="Red">为什么a的值a = 12而不是a = 10,这个程序中并没有再次定义a的值</font>,这是什么原理?
复制代码
b = ( ++a ) + ( a++);
  
++a; 和 a++; 在单独的一条语句中 的意思就是: a+=1  也就是 a = a +1;

但是 ++a 的意思是 先加 再使用
a++的意思,是先用再加

打个比方:
int  a  = 1, b =0;

如果是  b = ++a; 那么 b是等于 2的
如果是 b = a++; 那么 b 是等于1 的
但是上面两条语句任意一条执行完后,也就是;过后跳到下一条语句后  a 都等于 2

LZ可以打一下代码试验一下



作者: bubuatt    时间: 2014-3-20 19:20
这是看调用的顺序的,++在前先增值再调用,++在后先调用后增值 的思密达
作者: Ranger    时间: 2014-3-20 22:46
++a是先进行++运算,然后进行赋值,而a++是先进行赋值,然后a再++
作者: 475201052    时间: 2014-3-20 22:59
因为你进行了两次++a的运算,所以a的值加2 啊,
作者: 9385047    时间: 2014-3-20 23:10
a++和++a都对a的值重新定义了。
a++是先运算,再自增,++a是先自增再运算。
例如:
int a = 1, b = 1;
int c, d;
c = 1 + (a++);
d = 1 + (++b);
运行的结果是:
a = 2;
b = 2;
c = 2;
d = 3;
c = 1 + (a++)中,直到完成加法操作之后,a才被自增到2,而d = 1 + (++b)中是,先把b自增到2,再做加法运算。
作者: 路默”    时间: 2014-3-20 23:58
求b值:b=(++a)+(a++)  ( )优先级大于运算符+,int a=10-->运算++a与a++,自增+1
作者: 路默”    时间: 2014-3-21 00:02
路默” 发表于 2014-3-20 23:58
求b值:b=(++a)+(a++)  ( )优先级大于运算符+,int a=10-->运算++a与a++,自增+1

= =不好意思,没写完,按错键了。       (++a)+(a++)=22;     求a值:int a=10,程序运算两次自增,结果为12
作者: 远人    时间: 2014-3-21 08:45
周宇华 发表于 2014-3-20 18:02
b = (++a) + (a++);
分开来看就相当于下面三句语句:
a=a+1;//a=11

恩,这个是我想看到的,答主这个是答到点上了!
作者: 远人    时间: 2014-3-21 08:47
keycola 发表于 2014-3-20 18:08
b = ( ++a ) + ( a++);
  
++a; 和 a++; 在单独的一条语句中 的意思就是: a+=1  也就是 a = a +1;

恩,敲了,理解了,主要是a++和++a就是a=a+1,这这个过程中是完成了计算的
作者: 沙洲冷    时间: 2014-3-21 18:57
a++;相当于a=a+1;也就是把a+1的值赋值给了a,a的值加1,在语句  b = (++a) + (a++);中,a的值自加了两次,所以a的值由10变为了12.




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