关闭

计算机常用知识_VC_TC_printf中++和--说明

432人阅读 评论(0) 收藏 举报
分类:


其实是这样的

1. vc和tc的输出表达式里运行的顺序都是右到左

2. vc在遇到输出表达式里有a++这样的语句时是这么处理的

   输出a

   等输出表达式结束在执行a=a+1;

而tc则是在输出表达式先按照右到左的顺序执行,当碰到a++的时候先做a=a+1,然后再继续按照右到左的顺序执行

为了说明这个东西我给你设计了一些代码方便你理解

说明第一点的代码:

tc代码如下:

#include <stdio.h>

void main()

{

    int b = 2;

    printf("%d%d %d\n", b=b+1,b=b+1,b=b+1);

    getch();

}

结果为:

5 4 3

vc代码如下:

#include <stdio.h>

void main()

{

 int b = 2;

 printf("%d %d%d\n",b=b+1,b=b+1,b=b+1);

}

结果为:

5 4 3

这样就看出结合性了都是右到左

 

说明第二点的代码:

tc代码:

#include <stdio.h>

void main()

{

    int b = 2;

    printf("%d%d %d\n",b,b++,b);

   printf("%d\n",b);

    getch();

}

结果:

3 2 2

3

vc代码:

#include <stdio.h>

void main()

{

 int b = 2;

 printf("%d %d%d\n",b,b++,b);

 printf("%d\n",b);

}

结果:

2 2 2

3

这里看出最后在输出语句结束后都的到了b=b+1的结果第2个输出语句的结果3

但是第一个输出语句的结果说明tc在输出语句里就执行了b++,而vc则没有在输出语句里执行b++,其实他隐含着在这个输出语句后还有一个b=b+1;是你看不到的。

你还可以在vc里用

#include <stdio.h>

void main()

{

 int b = 2;

 printf("%d %d%d\n",b++,b++,b++);

 printf("%d\n",b);

}

来看看结果是不是

2 2 2

5

如果你能理解到

#include <stdio.h>

void main()

{

 int b = 2;

 printf("%d %d %d\n",b,b,b);

 b++;

 b++;

 b++;

 printf("%d\n",b);

}

这样的代码时,就说明你已经明白了。

到这 你完全可以自己解释你提出的问题了

这里提醒一下,tc vc在输出语句里碰到++a这样的语句时,都是在输出语句里直接解决的。

 

 

tc vc printf的执行顺序都是右到左

说明这个问题的设计如下:

#include <stdio.h>

void main()

{   

    int b = 1;

    printf("%d %d\n",b++,b++);

 printf("%d\n",b);

 printf("%d %d %d%d\n",b++,b++,b=50,b++);

 printf("%d\n",b);

}

tc结果

2 1

3

51 50 50 3

52

vc结果

1 1

3

50 50 50 3

53

 

 

++x 在vc tc 中都一样 在printf中就解决 先x=x+1 在显示x(如果有对应的现实位)

 

可以用

#include <stdio.h>

void main()

{   

    int b = 1;

    printf("%d%d\n",++b,++b);

 printf("%d\n",b);

 printf("%d %d %d%d\n",++b,++b,b=50,++b);

 printf("%d\n",b);

}

在tc vc中测试 结果都应该一样

3 2

3

52 51 50 4

52

 

在提示一下 因为库函数原型我们看不到 所以遇到这样的问题 只有通过上面这样的逻辑推理来推想库函数的执行过程 tc vc 编译器的稍微不同就得到不同结果,提示大家 写程序一定要规范 这样的语法结构型不应该出现在开发代码中,如果你是程序员,你会非常危险的弄不好,就为了这段代码你的工作就没了......现在在搞开发的朋友一定深有体会...

在学习中能够想到这么去比较编译器,还是不错的值得鼓励.但不要把时间都浪费在这上,祝愿大家进步!

碰到问题要用代码去说明 不要凭空想象,这样做很危险!

这里我做的解释,是一个合理的推论,实际的源码我们看不到,所以可能跟真实的代码思路还是有些出入,希望大家来指正,但要带代码来说服我!!

 

int x=3,y;

  

  y=(x++)+(x++)+(++x)+5;

  printf("%d%d\n",y,x);

  printf("%d\n",x);

 VC中结果

  15   3

6

 TC中结果/

 17  3

  6

  TC   1、将所有先++--的先抽出来计算;

2、将第一步计算的结果带入表达式中,计算表达式的值;

3、再将所有后自增自减预算抽出来进行计算;

 Int x=3,y;

 printf("%d%d\n",(x++)+(x++)+(++x)+5,x);

  printf("%d\n",x);

 VC中输出结果;

15   3

6

 TC 中输出结果

  18   3

  6

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:275701次
    • 积分:4037
    • 等级:
    • 排名:第7722名
    • 原创:103篇
    • 转载:304篇
    • 译文:4篇
    • 评论:10条
    最新评论