[C++]a+++b与while( (*strDest++ = * strSrc++) != ‘\0’ ) --转载

对于++、--运算符,我们应注意以下几点:

(1)++、--运算符只能用于变量,而不能用于常量或表达式,例如8++,(x+y)--均是不合法的。

(2)++、--运算符是单目运算符,优先级高于双目基本算术运算符,而低于括号( ( ) )运算符,结合性为从右到左。

(3)++、--运算符的运算对象为字符型、整型、指针型变量或数组元素,运算结果的数据类型同运算对象的类型一致。

(4)当出现难以区分的若干个“+”或“-”组成运算符串时,C语言规定:从左到右取尽可能多的符号组成运算符。例如,设整型变量a、b的值均为5,则:

a+++b   应理解为(a++)+b,结果为10,运算后a为6,b不变。

a---b   应理解为(a--)-b,结果为0,运算后a为4,b不变。

但如果出现如下形式:

(a++)+(a++)+(a++)

表达式的值是多少呢?有的系统按照从左到右顺序求解括弧内的运算,求完第一个括弧的值后,实现a的自加,a值变为6,再依次求第二个、第三个括弧的值,结果表达式相当于5+6+7,即18。而另一些系统(如Turbo c)把5作为表达式中所有a的值,因此3个a相加,得表达式的值为15,在求出整个表达式的值后再实现自加3次,a的值变为8。应该避免出现这种岐义,程序中尽量不要出现这种现象。

(5)在printf( )函数中,实参数的求值顺序,各系统不一样。在多数系统中对函数的求值顺序是从右到左。例如,i初值为5。

printf("%d,%d",i,i++);

输出结果为:

          6,5

(6)请不要在一个表达式中对同一个变量进行多次诸如i++或++i等运算,例如写成:i++*i++-++i,这种表达式不仅可读性差,而且不同的编译系统对这样的表达式将作不同的处理,因而得到的结果也各不相同。


简洁的C语言字符串复制函数:

char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ )
NULL ;
return address ;
}


assert是当括号里的内容为假时程序报错。
先*,后++,然后赋值,然后while里面的循环判断比较。
将*strSrc赋值给*strDest,然后判断是不是已经到达\0(即字符串结尾),同时,执行完赋值后strSrc和strDest指针均后移一位。总的结果即是:将strSrc指向的内容复制到strDest,直到strSrc指向\0.
\0代表字符串的结束符。

源地址: http://hi.baidu.com/lechie/blog/item/469c54101a6420fdc3ce79eb.html

转载于:https://www.cnblogs.com/weihai2003/archive/2009/10/13/1582602.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值