首页 > 解决方案 > 这个while循环如何整理指针?

问题描述

我是指针的新手,大约一周前发现了它们。我正在阅读的这本书向我介绍了一个需要我解决的问题,我花了一段时间才想出正确的解决方案,所以我作弊了。查了一下,想到了这个:

#include <iostream>

void mystrcpy(char* str1, char* str2) {
    while (*str1++ = *str2++);

}

int main() {
    char str1[15] = "C++";
    char str2[15] = "Pointers";

    std::cout << str1 << std::endl << str2 << std::endl;

    mystrcpy(str1, str2);

    std::cout << str1 << std::endl << str2 << std::endl;
}

问题是我在 void 函数处填写空白以解决问题和 main() 下面的问题,它打印出:

C++
Pointers
C++
Pointers

它希望我看起来像这样:

C++
Pointers
Pointers
Pointers

所以,基本上我不明白如何while (*str1++ = *str2++);解决这个问题?看了一段时间还是不知道它是如何把字符串排序出来的

标签: c++visual-c++

解决方案


指针就像指向内存中特定位置的变量。您可以取消引用它们以获取它们指向的值*str2,并增加它们以使它们指向内存中的下一个值(基于它们的数据类型)str2++

优先级可能会令人困惑。*str2++按以下顺序工作:

  • 获取 指向的值str2,然后
  • 递增str2以指向下一个字符
    while (*str1++ = *str2++);

str2该语句将每个字符从into复制str1str2. 它的工作原理是:

  • *str2: 获取指向的字符str2
  • *str1 = *str2: 将指向的字符写入指向str2的目的地str1
  • str1++, str2++: 递增str1str2用于下一次循环迭代。现在每个指针都指向每个字符串中的下一个字符。
  • str2指向空终止符时,*str2返回 0(或'\0'),*str1 = *str2并将其写入str1,并返回 0,这将导致while循环完成。

推荐阅读