黑马程序员技术交流社区

标题: 关于C语言的一些问题 [打印本页]

作者: welfarezhang    时间: 2015-5-9 16:00
标题: 关于C语言的一些问题
本帖最后由 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值各是多少
请路过的大神解答
作者: welfarezhang    时间: 2015-5-9 16:02
在问一下,需要考虑优先级吗
作者: MadPawn    时间: 2015-5-9 16:13
b=23
a=12
个人认为,欢迎纠正
作者: MadPawn    时间: 2015-5-9 16:36
MadPawn 发表于 2015-5-9 16:13
b=23
a=12
个人认为,欢迎纠正

不对  仔细想了想
b=22
a=12
作者: 飞翔的猪    时间: 2015-5-9 16:36
我也纠结这个问题,刚发了帖子问。结果没人回答。。。 按道理是 a为12,b为22 可是结果却是23
作者: wangsong    时间: 2015-5-9 16:54
a == 12   b == 23
作者: welfarezhang    时间: 2015-5-9 16:57
飞翔的猪 发表于 2015-5-9 16:36
我也纠结这个问题,刚发了帖子问。结果没人回答。。。 按道理是 a为12,b为22 可是结果却是23 ...

刚看了下李明杰老师的视频,他的运行结果是22的,你在看看吧,没错的 是这样
作者: welfarezhang    时间: 2015-5-9 16:58
MadPawn 发表于 2015-5-9 16:36
不对  仔细想了想
b=22
a=12

是的呢,没错的,刚看了下MJ的视频
作者: 飞翔的猪    时间: 2015-5-9 17:16
换一个编译器吧,用unix和linux下的编译器,都是22,就是编译器的方式不一样应该,汗。。。坑人啊
作者: welfarezhang    时间: 2015-5-9 17:22
wangsong 发表于 2015-5-9 16:54
a == 12   b == 23

你这个b的值有点问题,应该是22
作者: welfarezhang    时间: 2015-5-9 17:24
飞翔的猪 发表于 2015-5-9 17:16
换一个编译器吧,用unix和linux下的编译器,都是22,就是编译器的方式不一样应该,汗。。。坑人啊 ...

哈哈,搞明白了就好
作者: 香草芭芙    时间: 2015-5-9 19: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. }
复制代码

作者: 刘雨轩1314    时间: 2015-5-9 19:38
运行结果是a=12,b=22,
作者:   张恒宇    时间: 2015-5-9 21:46
输出a=12,22这里先说a首先定义a的时候赋值10.第一次调用++a得到a=11了,在调用a++时。。。a=11之后a继续自加=12.。。所以输出a=12,b=11+11=22
作者:   张恒宇    时间: 2015-5-9 21:55
这里说一下吧。。。。++a是先给赋值的a+1进行计算。。。。a++是先取a的值计算后再加1
作者:   张恒宇    时间: 2015-5-9 22:11
#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就是先加一再输出。。。这样说还不明白。。。我也没办法

作者: ios专用    时间: 2015-5-9 23:32
弄明白++a和a++的区别就行了
作者: 逆流瞅瞅    时间: 2015-5-10 00:00
a=12 ,b=22。 只要记住++a在进行其他操作之前运算,a++在进行其他操作之后运算就行。
作者: ydy96315    时间: 2015-5-10 07:16
22~~~~~~绝对是22
作者: welfarezhang    时间: 2015-5-10 13:43
此贴已结,感谢大家的解答,不一一回复了
作者: xiongmaoren518    时间: 2015-5-10 13:57
a的值是12,b的值是22,不过有人说b的值是23
作者: welfarezhang    时间: 2015-5-10 14:58
xiongmaoren518 发表于 2015-5-10 13:57
a的值是12,b的值是22,不过有人说b的值是23

正确结果b的值是22
作者: 我为宇宙    时间: 2015-7-8 09:04
香草芭芙 发表于 2015-5-9 19:22

请问美女,你是直接复制过来的代码还是剪切呢?
作者: Thomas-王    时间: 2015-7-8 09:45
b=(++a)+(a++)     ++a=11;使用完之后a值变成11;a++先使用a的值11计算;b=11+11=22;结束后,a的值加1,变成12;




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