关于前置++和后置++的那么点纠结

最近看strcpy的标准实现,对下面这个写法有些疑惑,主要是优先级的疑惑,查资料发现++的优先级比*(取指针内容)高,应该先++才再取值,再赋值,这样就不对了,后来才想明白原来是++还分前置++和后置++。这个搞明白了,这个算法就清楚了

char*strcpy(char* des,constchar* source)

 {
  char * r=des;
  assert ((des != NULL) && (source != NULL));
  while ((*des++ = *source++)!= '\0' );
  return r;
 }

前置++返回的就是操作数自增后的结果

 
  1. int a=5;
  2. int b=++a;//该表达式执行后b=6,a=6
int a=5;
int b=++a;//该表达式执行后b=6,a=6

后置++返回的是操作数的一个副本(未自增操作数的值),然而操作数本身已经调用前置++的方法自增

 
  1. int a=5;
  2. int b=a++;//该表达式执行后b=5,a=6
int a=5;
int b=a++;//该表达式执行后b=5,a=6

两者比较总结:

前置++的效率更高,后置++效率低(内部实现不仅拷贝了一份原始操作数的副本而且还调用了前置++进行操作数自增,然后返回元素操作数的副本),推荐使用前置++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值