为什么这个指数有效? C ++

时间:2014-06-27 17:14:08

标签: c++ while-loop

所有,我的教授给了我们以下循环用于本周的任务:

char *ptr1, *ptr2;  
char c;
ptr1 = &arr[0];  
ptr2 = &arr[idx-1];

while(ptr1 < ptr2){
  c     = *ptr1;  
  *ptr1 = *ptr2;
  *ptr2 = c;

  ptr1++;
  ptr2--;
}  

这是关于ptr1与ptr2的位置吗?该程序反转c_str并且工作正常,我只是不明白为什么。

2 个答案:

答案 0 :(得分:8)

您是否在理解任何单个陈述时遇到问题?如果没有,那么看看它是如何工作的只是一个完成这些步骤的问题。

循环的前三个语句交换ptr1指向的字符和ptr2指向的字符。最初,ptr1ptr2指向字符串的第一个和最后一个字符。第二遍,他们指向字符串的第二个和第二个字符等。

最初:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  a  |  b  |  c  |  d  |  e  | NUL |    c |  ?  |
        +-----+-----+-----+-----+-----+-----+      +-----+
           ^                       ^
           |                       |
          ptr1                    ptr2

c = *ptr1;之后:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  a  |  b  |  c  |  d  |  e  | NUL |    c |  a  |
        +-----+-----+-----+-----+-----+-----+      +-----+
           ^                       ^
           |                       |
          ptr1                    ptr2

*ptr1 = *ptr2;之后:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  e  |  b  |  c  |  d  |  e  | NUL |    c |  a  |
        +-----+-----+-----+-----+-----+-----+      +-----+
           ^                       ^
           |                       |
          ptr1                    ptr2

*ptr2 = c;之后:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  e  |  b  |  c  |  d  |  a  | NUL |    c |  a  |
        +-----+-----+-----+-----+-----+-----+      +-----+
           ^                       ^
           |                       |
          ptr1                    ptr2

ptr1++; ptr2--;之后:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  e  |  b  |  c  |  d  |  a  | NUL |    c |  a  |
        +-----+-----+-----+-----+-----+-----+      +-----+
                 ^           ^
                 |           |
                ptr1        ptr2

又过了一次:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  e  |  d  |  c  |  b  |  a  | NUL |    c |  b  |
        +-----+-----+-----+-----+-----+-----+      +-----+
                      ^ ^
                      | |
                   ptr1 ptr2

循环结束。

答案 1 :(得分:0)

让我们说你有一个字符串。

+---+---+---+---+---+---+---+---+---+---+---+
| t | h | i | s |   | i | s |   | f | o | o |
+---+---+---+---+---+---+---+---+---+---+---+

现在让我们说ptr1ptr2指向:

ptr1                                    ptr2
|                                       |
v                                       v
+---+---+---+---+---+---+---+---+---+---+---+
| t | h | i | s |   | i | s |   | f | o | o |
+---+---+---+---+---+---+---+---+---+---+---+

while循环开始时。您现在可以按照中的行 while一次循环一步,以了解代码反转的原因 字符串。