正确递增指针?

时间:2013-07-17 05:06:32

标签: c++ loops pointers increment

我使用char *数组将字符串的一部分复制到另一个char *数组中,我想知道是否这样做

do {
    *pntr1++ = *pntr2++
} while (*pntr2 != '\0');

相同
do
{
    *indPtr = *wordPtr;
    indPtr++;
    wordPtr++;
} while (*wordPtr != '\0');

或者我最终会使用第一种方法跳过索引吗?

2 个答案:

答案 0 :(得分:3)

是的,两者是等价的。后增量表示之前的值在该表达式中使用增量,并且增量发生在表达式结尾处的序列点之前的某个时间(或者,在C ++术语中,“在之前排序”下一个表达式。)

因此,在这两种情况下,赋值都会在之前使用指针的值增加,而与\0的比较则使用指针之后的值 / em>它已经增加。

如果您希望复制字符串,则会导致问题:至少在您显示的代码中,终止(假定的)字符串的\0将不会被复制(尽管您之后可以添加代码来终止目标字符串。)

答案 1 :(得分:2)

使用++时,a++首先返回a的值,然后递增它。

所以,代码

*a++ = *b++

*a = *b;
a++;
b++;

是等价物。