C 有人能给我解释一下——目的地在这里的用法吗?
我正在完成关于C的CISCO课程,我对以下功能有疑问 有人能给我解释一下这个函数的逻辑吗,特别是这里的C 有人能给我解释一下——目的地在这里的用法吗?,c,C,我正在完成关于C的CISCO课程,我对以下功能有疑问 有人能给我解释一下这个函数的逻辑吗,特别是这里的--destination的用法 char *mystrcat(char *destination, char *source) { char *res; for(res = destination; *destination++; ) ; for(--destination; (*destination++ = *source++); ) ; return r
--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我认为标准没有确切说明何时执行前置和后置增量-这就是为什么在相同序列中使用它们是未定义行为的原因。