Me *_*d I 0 c++ loops while-loop
我在循环时遇到一些麻烦,它的结果是"TT",但对我来说,如果它打印出"TP"是有意义的.谁能帮我吗?我将展示为什么我认为它应该打印"TP",并需要解释为什么它打印"TT"(这是正确的).
#include <iostream>
using namespace std;
char txt[] = "ETERNITTPLATENE-OG-TAKPAPPEN-BLE-KASTET";
void funk(char* t1, char* t2, int n)
{
while (t1 < t2) { ++t1; t2 -= n; } cout << *t1 << *t2;
}
int main() {
funk(txt, txt + 27, 3); cout << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以它第一次运行func(E,N,3)所以我们得到
E < N
哪个是真的,因此它使得E到T和N到P(因为27-3是24,并且在那个数组中P
是24).
那么我们得到T < P
,这是假的,因此它应该停止while循环和显示TP
,它不会.我在想什么?
当你这样做时,t1 < t2
你不是在比较(*t1) < (*t2)
哪个意味着比较'T' < 'P'
.
相反,它正在比较存储字符'T'
和'P'
存储的内存地址的值.在这种情况下,'T'
之前存储'P'
.
我已经包含了指针在整个循环中的移动方式.这应该澄清while
循环的整个迭代.
E T E R N I T T P L A T E N E - O G - T A K P A P P E N
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
^ ^
t1 t2
E T E R N I T T P L A T E N E - O G - T A K P A P P E N
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
^ ^
t1 t2
E T E R N I T T P L A T E N E - O G - T A K P A P P E N
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
^ ^
t1 t2
E T E R N I T T P L A T E N E - O G - T A K P A P P E N
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
^ ^
t1 t2
E T E R N I T T P L A T E N E - O G - T A K P A P P E N
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
^ ^
t1 t2
E T E R N I T T P L A T E N E - O G - T A K P A P P E N
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
^ ^
t1 t2
E T E R N I T T P L A T E N E - O G - T A K P A P P E N
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
^ ^
t1 t2
E T E R N I T T P L A T E N E - O G - T A K P A P P E N
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
^ ^
t2 t1
Run Code Online (Sandbox Code Playgroud)