最近看strcpy的标准实现,对下面这个写法有些疑惑,主要是优先级的疑惑,查资料发现++的优先级比*(取指针内容)高,应该先++才再取值,再赋值,这样就不对了,后来才想明白原来是++还分前置++和后置++。这个搞明白了,这个算法就清楚了
char*
strcpy
(
char
* des,
const
char
* source)
{
char
* r=des;
assert
((des != NULL) && (source != NULL));
while
((*des++ = *source++)!=
'\0'
);
return
r;
}
前置++返回的就是操作数自增后的结果
- int a=5;
- int b=++a;//该表达式执行后b=6,a=6
int a=5; int b=++a;//该表达式执行后b=6,a=6
后置++返回的是操作数的一个副本(未自增操作数的值),然而操作数本身已经调用前置++的方法自增
- int a=5;
- int b=a++;//该表达式执行后b=5,a=6
int a=5; int b=a++;//该表达式执行后b=5,a=6两者比较总结:
前置++的效率更高,后置++效率低(内部实现不仅拷贝了一份原始操作数的副本而且还调用了前置++进行操作数自增,然后返回元素操作数的副本),推荐使用前置++