使用带有后增量的指针复制字符

时间:2014-12-13 14:54:07

标签: c pointers post-increment

最近,我一直在学习C和指针。

在Stephen G. Kochan撰写的“C编程”一书中,我遇到了一个例子,我很难完全理解它。

要使用指针将字符串from复制到字符串to,示例表明:


void copyString (char *to, char *from) {
    while ( *from ) 
         *to++ = *from++;

    *to = '\0'; 
}

据我了解,*from++*from的后增量;因此*to++的值应仅为*from

例如,如果

`*from` is in the position 1.

`*from++` is in position 2

`*to++` in position 2, 

但是:*from++ = *to++应该将*from的值返回为*to位置1,而不是2。

编译器说它的位置2,该书也说它的位置2.

我在这里有点困惑。你对这个案子有什么可行的解释吗?

3 个答案:

答案 0 :(得分:5)

使用postfix ++一元运算符时,在计算操作数的值后对增量进行排序。所以表达式相当于:

*to = *from;
to++ ;
from++ ;

在您的示例中:*to++ = *from++;,获取*to*from的值,然后将*from的值分配给*to,然后指针递增。

答案 1 :(得分:1)

*to++ = *from++; tofrom都有后期增量。

您可以阅读,

  1. *from的内容复制到*to
  2. 增量tofrom
  3. 评估后缀运算符,并在赋值运算符=的求值完成后执行递增(递减)操作。因此,首先复制值,然后两个指针都递增。

答案 2 :(得分:0)

作为之前答案的补充。

在C中,后缀增量++的优先级高于解除引用运算符*,这意味着* ptr ++相当于*(ptr ++)。检查this以获取有关C的运算符优先级的更多信息。