【问题标题】:What is this line of code achieving? What does the incrementation mean? [duplicate]这行代码实现了什么?增量是什么意思? [复制]
【发布时间】:2022-02-18 00:53:18
【问题描述】:

我知道st 都是指针,它们被相互复制,但递增部分让我感到困惑。

void funct(char *s, char *t){
    while( *s++ = *t++ );
}

【问题讨论】:

  • "增量是什么意思?" 假设连续内存中有多个chars,调整指针指向next char.

标签: c++ while-loop c-strings strcpy function-definition


【解决方案1】:

答案在这里 How does "while(*s++ = *t++)" copy a string? 相当于这样:

while (*t) {
    *s = *t;
    s++;
    t++;
}
*s = *t;

当 t 指向的字符为 '\0' 时,while 循环将终止。在此之前,它会将 t 指向的字符复制到 s 指向的字符,然后递增 s 和 t 以指向其数组中的下一个字符。

【讨论】:

    【解决方案2】:

    该函数使用指针将指针t指向的字符串的第一个字符复制到指针s指向的字符数组中。

    void funct(char *s, char *t){ while( *s++ = *t++ ); }
    

    为了更清楚,您可以通过以下方式重写 while 循环

    void funct(char *s, char *t)
    { 
        while( ( *s = *t ) != '\0' )
        {
            s++;
            t++;
        }
    }
    

    唯一的区别是如果复制的字符不是指针t指向的字符串的终止零字符'\0',则最后一个while循环中的指针的增量是在while循环的主体中执行的.

    即指针t指向的字符被分配给指针s指向的字符。如果当前复制的字符等于终止零字符,则循环条件评估为假。结果,一个字符串被复制到另一个字符数组中。

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多