给新手关于自增自减运算的一些警示
2015-02-08 15:54
169 查看
大多数自学c语言的新手们不会太过于注重基础的掌握,而求快速开发,这样会造成程序出现各种各样的bug,现在我来举个简单的自增的运算的例子:
看如下代码:
Great,那么大家猜测下这个代码的输出结果吧。
很多人可能会说这个结果是这样的:
1 1
2 2
3 3
......
那么结果,往往都是很残酷的,真正的结果应该是这样的:
0 1
1 2
....
10 11
那么为什么会出现这种情况呢?我们来分析一下:
其实现行的几个主流的编译器,vc和vs里面,自增运算符i++这种类型的,是先用后加的,也就是说它要完成其本身该做的事情,然后再去自加。
好比这行语句:
int i=0;
printf("%d",i++);
这个就会输出0,但是输出之后i值就变了,变成了1,这也就是先用后加。
但是++i却不同,它一定是先加后用的,这个没有疑问,所以新手以后尽量避免i++出现的情况,除非你已经能够理解其中的内容。
同时根据这个语句也可以做出一个一句话copy字符串的语句,如下:
char a[64];
char b[64];
while(a++=b++);
后面那个分号不能少哈,这个自行理解吧
看如下代码:
int i = 0; int k = 0; while(i<10) { i=k++; printf("%-3d%d\n",i,k); }
Great,那么大家猜测下这个代码的输出结果吧。
很多人可能会说这个结果是这样的:
1 1
2 2
3 3
......
那么结果,往往都是很残酷的,真正的结果应该是这样的:
0 1
1 2
....
10 11
那么为什么会出现这种情况呢?我们来分析一下:
其实现行的几个主流的编译器,vc和vs里面,自增运算符i++这种类型的,是先用后加的,也就是说它要完成其本身该做的事情,然后再去自加。
好比这行语句:
int i=0;
printf("%d",i++);
这个就会输出0,但是输出之后i值就变了,变成了1,这也就是先用后加。
但是++i却不同,它一定是先加后用的,这个没有疑问,所以新手以后尽量避免i++出现的情况,除非你已经能够理解其中的内容。
同时根据这个语句也可以做出一个一句话copy字符串的语句,如下:
char a[64];
char b[64];
while(a++=b++);
后面那个分号不能少哈,这个自行理解吧
相关文章推荐
- 关于VLAN的一些理解(图文并茂,推荐新手阅读)续1
- 关于新旧版本的GCC对浮点数运算的一些行为(读《CS:APP》)
- Play FrameWork scala.html页面关于变量的一些运算操作
- 关于android中位运算的一些看法
- 关于新手语言一些想法(本人也是小白)
- 写给新手的,关于投稿的一些技巧- -
- 关于编程,新手最容易问的一些问题!
- sas与java关于运算的一些转换
- 关于项目启动报错一些新手问题
- 关于一些新手MFC入门时,在vs上运行孙鑫老师代码时可能碰到的问题。
- 新手关于Linux系统的一些错误见地
- 关于BigDecimal一些运算问题。。。。。。。。
- <2012 12 20> Gcc/ARM/Linux Kernel关于浮点运算的一些说明(很有用!)
- 关于新手对于json的一些话
- 新手问题:Fragment关于button setonclicklistener的一些东西
- 关于VLAN的一些理解(图文并茂,推荐新手阅读)续2
- 关于byte类型的运算问题(适合新手阅读)
- java中关于位移运算的一些小问题
- 关于QT、QT creator和编译器,新手入门必知的一些知识
- 新手关于如何看编程经典书的一些疑惑(知乎-孙天齐)