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

转载 2013年12月05日 01:58:59


其实是这样的

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

 

相关文章推荐

printf() VC、TC从右向左 求值 and sequence point(顺序点)

如果你用TC,那么printf语句对参数的处理是从右到左进行的。但是如果你使用VC,则printf语句对参数的处理是从左到右进行的。 不同类型的编译器对此处理的方式不同,因此,需要编程测试一下来确定处...
  • ysmz4
  • ysmz4
  • 2013-12-02 11:17
  • 740

printf函数常用的输出方式及格式化输出说明

printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。 printf()函数的调用格式为: printf("", )。 格式输出,它是c语言中产生格式化输出的函数(在 ...
  • zlllg
  • zlllg
  • 2017-05-06 18:45
  • 53

VC常用知识

  • 2011-10-16 09:15
  • 741KB
  • 下载

vc常用知识点归类

1、模式对话框如何最大化? 答:在对话框的OnInitDialog里面调用: ShowWindow(SW_MAXIMIZE); //最大化 MSDN: OnInitDialog, O...

图解在VC里使用graphics.h绘图(类似TC)

1 www.easyx.cn 下载 EasyX 库 我下的2014;解压后如下图; 2 根据自己的VC 版本进行安装 3 在控制台画一个圆 #include // 引用图形库 #...

一些常用的计算机知识

  • 2011-07-15 11:14
  • 351B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)