char *strcpypp(char *dest, char *orig)
{
char *tmp = dest;
while (*dest++ = *orig++)
;
return tmp;
}
此功能实际上在做什么?。
对于初学者,该函数应声明为
char *strcpypp(char *dest, const char *orig);
因为在函数中未更改指针orig
指向的字符串。
变量tmp应该在for循环中声明。
所以功能看起来像
char * strcpypp( char *dest, const char *orig )
{
for ( char *tmp = dest; *tmp++ = *orig++; );
return dest;
}
该函数将指针orig指向的字符串复制到指针dest指向的字符数组中。
此表达式的值
*tmp++ = *orig++
是在指针tmp
和orig
自身递增之前分配给指针tmp指向的字符的值。
因此,如果赋值字符是指针orig所指向的字符串的终止零字符'\ 0',则它将其分配给指针tmp所指向的字符,并且循环的条件求值为false,因为该值整个表达式的等于零。