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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© welfarezhang 中级黑马   /  2015-5-9 16:00  /  2516 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 welfarezhang 于 2015-5-9 18:28 编辑

#include<stdio.h>
int main()
{
int a = 10;
int b = (++a) + (a++);
printf("%d,%d"a,b);
return 0;
}
请问a,b值各是多少
请路过的大神解答

23 个回复

倒序浏览
在问一下,需要考虑优先级吗
回复 使用道具 举报
b=23
a=12
个人认为,欢迎纠正
回复 使用道具 举报
MadPawn 发表于 2015-5-9 16:13
b=23
a=12
个人认为,欢迎纠正

不对  仔细想了想
b=22
a=12
回复 使用道具 举报
我也纠结这个问题,刚发了帖子问。结果没人回答。。。 按道理是 a为12,b为22 可是结果却是23
回复 使用道具 举报
a == 12   b == 23
回复 使用道具 举报
飞翔的猪 发表于 2015-5-9 16:36
我也纠结这个问题,刚发了帖子问。结果没人回答。。。 按道理是 a为12,b为22 可是结果却是23 ...

刚看了下李明杰老师的视频,他的运行结果是22的,你在看看吧,没错的 是这样
回复 使用道具 举报
MadPawn 发表于 2015-5-9 16:36
不对  仔细想了想
b=22
a=12

是的呢,没错的,刚看了下MJ的视频
回复 使用道具 举报
换一个编译器吧,用unix和linux下的编译器,都是22,就是编译器的方式不一样应该,汗。。。坑人啊
回复 使用道具 举报

你这个b的值有点问题,应该是22
回复 使用道具 举报
飞翔的猪 发表于 2015-5-9 17:16
换一个编译器吧,用unix和linux下的编译器,都是22,就是编译器的方式不一样应该,汗。。。坑人啊 ...

哈哈,搞明白了就好
回复 使用道具 举报
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a = 10;
  5.         int b = (++a) + (a++);
  6.     // 1) ++a ---> 先加后算 , (++a) == 11
  7.     // 2) a++ ---> 先算后加 , (a++) == 11 (因为在a++之后 a就变成 11)
  8.     // 3) b == 22 , a == 12 (因为 a++ 之后 11 变 12);
  9.         printf("%d,%d", a, b);

  10.         return 0;
  11. }
复制代码
回复 使用道具 举报
运行结果是a=12,b=22,
回复 使用道具 举报
输出a=12,22这里先说a首先定义a的时候赋值10.第一次调用++a得到a=11了,在调用a++时。。。a=11之后a继续自加=12.。。所以输出a=12,b=11+11=22
回复 使用道具 举报
这里说一下吧。。。。++a是先给赋值的a+1进行计算。。。。a++是先取a的值计算后再加1
回复 使用道具 举报
#include <iostream>
#include<stdio.h>

int main(int argc, const char * argv[]) {
    int a=10;
    int b=(a++);
   
    printf("%d\n",b);
    int c=(++a);
   
   
    printf("%d,%d,%d\n",a,b,c);
    return 0;
}
这个测试你可以得到结果。。。
10
12,10,12
也就是第一个输出时a并不是11是因为要先调用a之后再给+1
下面c=12是因为a是不是被自加了啊=11了吧再执行++a就是先加一再输出。。。这样说还不明白。。。我也没办法
回复 使用道具 举报
弄明白++a和a++的区别就行了
回复 使用道具 举报
a=12 ,b=22。 只要记住++a在进行其他操作之前运算,a++在进行其他操作之后运算就行。
回复 使用道具 举报
22~~~~~~绝对是22
回复 使用道具 举报
此贴已结,感谢大家的解答,不一一回复了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马