A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 远人 中级黑马   /  2014-3-20 17:09  /  2052 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 远人 于 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的值,这是什么原理?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

13 个回复

倒序浏览
++a和a++相当于把a的值在a=10的基础上做了两次加1,所以a的值就是12了。另外,++a是先自加1再赋值,a++是先赋值再自加1

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 氯化钾 于 2014-3-20 17:22 编辑

朋友 老师当时交给我我们的一句话 ++在前 就是 整个这条语句执行前先执行的自加一 而++在后 就是语句执行后自加一 很好理解吧:lol  ++ 的含义是大体上 a = a+1;
回复 使用道具 举报
b = (++a) + (a++);
分开来看就相当于下面三句语句:
a=a+1;//a=11
b=a+a;//b=22
a=a+1;//a=12

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
  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可以打一下代码试验一下


评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
这是看调用的顺序的,++在前先增值再调用,++在后先调用后增值 的思密达
回复 使用道具 举报
Ranger 中级黑马 2014-3-20 22:46:22
7#
++a是先进行++运算,然后进行赋值,而a++是先进行赋值,然后a再++
回复 使用道具 举报
因为你进行了两次++a的运算,所以a的值加2 啊,
回复 使用道具 举报
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,再做加法运算。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
求b值:b=(++a)+(a++)  ( )优先级大于运算符+,int a=10-->运算++a与a++,自增+1
回复 使用道具 举报
路默” 发表于 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-20 18:02
b = (++a) + (a++);
分开来看就相当于下面三句语句:
a=a+1;//a=11

恩,这个是我想看到的,答主这个是答到点上了!
回复 使用道具 举报
keycola 发表于 2014-3-20 18:08
b = ( ++a ) + ( a++);
  
++a; 和 a++; 在单独的一条语句中 的意思就是: a+=1  也就是 a = a +1;

恩,敲了,理解了,主要是a++和++a就是a=a+1,这这个过程中是完成了计算的
回复 使用道具 举报
a++;相当于a=a+1;也就是把a+1的值赋值给了a,a的值加1,在语句  b = (++a) + (a++);中,a的值自加了两次,所以a的值由10变为了12.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马