c++ - 这个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++);
解决这个问题?看了一段时间还是不知道它是如何把字符串排序出来的
解决方案
指针就像指向内存中特定位置的变量。您可以取消引用它们以获取它们指向的值*str2
,并增加它们以使它们指向内存中的下一个值(基于它们的数据类型)str2++
:
优先级可能会令人困惑。*str2++
按以下顺序工作:
- 获取 指向的值
str2
,然后 - 递增
str2
以指向下一个字符
while (*str1++ = *str2++);
str2
该语句将每个字符从into复制str1
到str2
. 它的工作原理是:
*str2
: 获取指向的字符str2
*str1 = *str2
: 将指向的字符写入指向str2
的目的地str1
str1++
,str2++
: 递增str1
和str2
用于下一次循环迭代。现在每个指针都指向每个字符串中的下一个字符。- 当
str2
指向空终止符时,*str2
返回 0(或'\0'
),*str1 = *str2
并将其写入str1
,并返回 0,这将导致while
循环完成。
推荐阅读
- mysql - 关系表上的 SQL 平均用户值
- python-3.x - 如何根据(核心)值对节点进行分组,为它们着色并以同心布局绘制
- json - 使用另一个 JSON Schema 验证 JSON Schema
- r - 更改 R 中的某些列名
- javascript - 如何检查日期 dd.mm.yyyy 的验证
- python - Azure Functions 和 DataLake gen 2 连接
- sql - SQL 最大计数解决方案
- command-line-interface - 如何使用 pandoc 将值传递给“子变量”?
- flutter - 有没有办法在 Dart 中克隆对象?
- java - Java JFolder 中显示的剪刀字符(Windows 资源管理器中未显示)