我是用一个char *数组部分字符串复制到其他的char *数组,我在想,如果这样做正确递增指针?
do {
*pntr1++ = *pntr2++
} while (*pntr2 != '\0');
是一回事
do
{
*indPtr = *wordPtr;
indPtr++;
wordPtr++;
} while (*wordPtr != '\0');
或将我最终跳过使用第一种方法的索引?
我是用一个char *数组部分字符串复制到其他的char *数组,我在想,如果这样做正确递增指针?
do {
*pntr1++ = *pntr2++
} while (*pntr2 != '\0');
是一回事
do
{
*indPtr = *wordPtr;
indPtr++;
wordPtr++;
} while (*wordPtr != '\0');
或将我最终跳过使用第一种方法的索引?
是的,这两者是等价的。后增加意味着之前的值在该表达式中使用了增量,并且该增量在表达式结尾处的序列点之前某个时间发生(或者,在C++术语中,“在下一个表达式之前被排序)。
因此,在这两种情况下,分配使用他们增加前的指针的值,并且比较\0
使用它已经增加后的指针的值。
如果您希望复制一个字符串,那会导致问题:至少在您显示的代码中,终止(假定)字符串的\0
不会被复制(尽管您可以添加代码之后终止目标字符串)。
运营商++
使用类似a++
首先返回值a
,然后增加它。
所以,代码
*a++ = *b++
和
*a = *b;
a++;
b++;
是等同物。
你试过了吗?发生了什么? –
@RogerRowland在可能未定义的行为的情况下,依靠某个特定实例中的“发生了什么”可能是一个糟糕的主意。 –
是的,两者都是一样的:我更喜欢'while(* pntr1 ++ = * pntr2 ++);' –