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

use*_*384 0 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--;
}  
Run Code Online (Sandbox Code Playgroud)

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

ike*_*ami 8

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

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

原来:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  a  |  b  |  c  |  d  |  e  | NUL |    c |  ?  |
        +-----+-----+-----+-----+-----+-----+      +-----+
           ^                       ^
           |                       |
          ptr1                    ptr2
Run Code Online (Sandbox Code Playgroud)

之后c = *ptr1;:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  a  |  b  |  c  |  d  |  e  | NUL |    c |  a  |
        +-----+-----+-----+-----+-----+-----+      +-----+
           ^                       ^
           |                       |
          ptr1                    ptr2
Run Code Online (Sandbox Code Playgroud)

之后*ptr1 = *ptr2;:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  e  |  b  |  c  |  d  |  e  | NUL |    c |  a  |
        +-----+-----+-----+-----+-----+-----+      +-----+
           ^                       ^
           |                       |
          ptr1                    ptr2
Run Code Online (Sandbox Code Playgroud)

之后*ptr2 = c;:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  e  |  b  |  c  |  d  |  a  | NUL |    c |  a  |
        +-----+-----+-----+-----+-----+-----+      +-----+
           ^                       ^
           |                       |
          ptr1                    ptr2
Run Code Online (Sandbox Code Playgroud)

之后ptr1++; ptr2--;:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  e  |  b  |  c  |  d  |  a  | NUL |    c |  a  |
        +-----+-----+-----+-----+-----+-----+      +-----+
                 ^           ^
                 |           |
                ptr1        ptr2
Run Code Online (Sandbox Code Playgroud)

再经过一次:

        +-----+-----+-----+-----+-----+-----+      +-----+
arr --> |  e  |  d  |  c  |  b  |  a  | NUL |    c |  b  |
        +-----+-----+-----+-----+-----+-----+      +-----+
                      ^ ^
                      | |
                   ptr1 ptr2
Run Code Online (Sandbox Code Playgroud)

循环结束.