字符指针赋值操作两侧用后置自增:功能等价性分析
关于
*t++ = *s++;的执行过程及等价代码分析 先看给定的基础代码:
char *s, *t; char c;
赋值语句*t++ = *s++;的执行过程
拆解成具体步骤:
- 先获取指针
s当前指向的内存中的字符值(即*s) - 紧接着将指针
s的地址自增1,使其指向内存中的下一个char类型位置 - 把第一步拿到的字符值写入指针
t当前指向的内存位置(即*t) - 最后将指针
t的地址自增1,同样指向下一个char类型位置
这里要明确:后置++运算符优先级高于*,但后置自增的特性是先使用变量当前值,再执行自增操作。所以*s++等价于*(s++),先取s指向的值,再移动s;同理*t++是先对t指向的位置完成赋值,再移动t。
等价选项判断
功能上完全等价于选项2,对应代码如下:
c = *s; s++; *t = c; t++;
这段代码的逻辑和原赋值语句完全一致:先用临时变量c保存s当前指向的值,移动s,再把值写入t指向的位置,最后移动t。
而选项1的代码是把t指向的值取出后写入s指向的位置,赋值方向和原语句完全相反,不符合要求。
内容的提问来源于stack exchange,提问作者Bill_Stewart
相关产品推荐
相关产品推荐

