问题:在这种特殊情况下,while循环在做什么?

问题描述 投票:1回答:1
char *strcpypp(char *dest, char *orig)
{
   char *tmp = dest;
   while (*dest++ = *orig++)
      ;

return tmp;
}

此功能实际上在做什么?。

c loops while-loop copy c-strings
1个回答
1
投票

对于初学者,该函数应声明为

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++

是在指针tmporig自身递增之前分配给指针tmp指向的字符的值。

因此,如果赋值字符是指针orig所指向的字符串的终止零字符'\ 0',则它将其分配给指针tmp所指向的字符,并且循环的条件求值为false,因为该值整个表达式的等于零。

© www.soinside.com 2019 - 2024. All rights reserved.