C 有人能给我解释一下——目的地在这里的用法吗?

C 有人能给我解释一下——目的地在这里的用法吗?,c,C,我正在完成关于C的CISCO课程,我对以下功能有疑问 有人能给我解释一下这个函数的逻辑吗,特别是这里的--destination的用法 char *mystrcat(char *destination, char *source) { char *res; for(res = destination; *destination++; ) ; for(--destination; (*destination++ = *source++); ) ; return r

我正在完成关于C的CISCO课程,我对以下功能有疑问

有人能给我解释一下这个函数的逻辑吗,特别是这里的
--destination
的用法

char *mystrcat(char *destination, char *source) 
{
    char *res;
    for(res = destination; *destination++; ) ;
    for(--destination; (*destination++ = *source++); ) ;
    return res;
}

第一个循环查找字符串teminator。当它找到它时,如果
*destination
为false,指针仍会以
*destination++
后增量

因此,下一个循环开始时,将指针减回到指向
'\0'
终止符的位置,以开始凝聚


在第二个循环中,复制每个字符,直到使用
(*destination++=*source++)找到字符串终止符作为循环控制进行评估。同样,这将包括要复制的所需字符串终止符。

第一个循环正在查找字符串终止符。当它找到它时,如果
*destination
为false,指针仍会以
*destination++
后增量

因此,下一个循环开始时,将指针减回到指向
'\0'
终止符的位置,以开始凝聚


在第二个循环中,复制每个字符,直到使用
(*destination++=*source++)找到字符串终止符作为循环控制进行评估。同样,这将包括被复制的所需字符串终止符。

这是一个非常复杂的函数,不应该编写得如此困难

--destination是C的一个奇怪特性。我假设您已经知道
variable++
将变量递增1。类似地,
变量--
将变量递减1。问题是,当++或-,位于变量名之后时,该操作是在整行执行之后执行的,当它位于变量之前时,C首先执行算术,然后计算整行

例如:

int c = 5  
print(c++)  -> outputs '5'
print(c)    -> outputs '6'
但是

这是因为在第二个示例中,在计算整行之前先计算增量


希望有帮助

这是一个非常复杂的函数,不应该写得这么难

--destination是C的一个奇怪特性。我假设您已经知道
variable++
将变量递增1。类似地,
变量--
将变量递减1。问题是,当++或-,位于变量名之后时,该操作是在整行执行之后执行的,当它位于变量之前时,C首先执行算术,然后计算整行

例如:

int c = 5  
print(c++)  -> outputs '5'
print(c)    -> outputs '6'
但是

这是因为在第二个示例中,在计算整行之前先计算增量


希望有帮助

除了答案:如果您对增量对指针的作用感到困惑,请搜索“C指针算术”。还要注意操作顺序,特别是在(*destination++)的情况下,它有差异和算术。除了答案:不要在代码中这样做,使用预先存在的系统库。除了答案:如果您对增量对指针的作用感到困惑,请搜索“C指针算术”。还要注意操作顺序,特别是在(*destination++)的情况下,它具有遵从性和算术性。除了答案:不要在代码中这样做,请使用预先存在的系统库。为了清楚起见,OP问题的答案是上面的第二段。
--destination
是上面的第二个循环的初始化,该循环递减
destination
指针。要澄清OP问题的答案,请参见上面的第2段。
--destination
是上面第二个循环的初始化,该循环递减
destination
指针。我不同意这很奇怪,它只是控制执行顺序的一种方式。是的,整体语法很麻烦,但是,嘿,这是C,仅限书呆子:)@Oisin我认为标准没有确切说明何时执行前置和后置增量-这就是为什么在同一序列中使用它们是未定义的行为。我不同意这很奇怪,这只是控制执行顺序的一种方式。是的,整体语法很麻烦,但嘿,这是C,仅限书呆子:)@Oisin我认为标准没有确切说明何时执行前置和后置增量-这就是为什么在相同序列中使用它们是未定义行为的原因。