所有,我的教授给了我们以下循环用于本周的任务:
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并且工作正常,我只是不明白为什么.
您是否在理解任何单个陈述时遇到问题?如果没有,那么看看它是如何工作的只是一个完成这些步骤的问题.
循环的前三个语句交换指向的字符ptr1和指向的字符ptr2.最初,ptr1并ptr2指向字符串的第一个和最后一个字符.第二遍,他们指向字符串的第二个和第二个字符,等等.
原来:
+-----+-----+-----+-----+-----+-----+ +-----+
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)
循环结束.