所有,我的教授给了我们以下循环用于本周的任务:
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并且工作正常,我只是不明白为什么。
答案 0 :(得分:8)
您是否在理解任何单个陈述时遇到问题?如果没有,那么看看它是如何工作的只是一个完成这些步骤的问题。
循环的前三个语句交换ptr1
指向的字符和ptr2
指向的字符。最初,ptr1
和ptr2
指向字符串的第一个和最后一个字符。第二遍,他们指向字符串的第二个和第二个字符等。
最初:
+-----+-----+-----+-----+-----+-----+ +-----+
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 |
+---+---+---+---+---+---+---+---+---+---+---+
现在让我们说ptr1
和ptr2
指向:
ptr1 ptr2
| |
v v
+---+---+---+---+---+---+---+---+---+---+---+
| t | h | i | s | | i | s | | f | o | o |
+---+---+---+---+---+---+---+---+---+---+---+
在while
循环开始时。您现在可以按照中的行
while
一次循环一步,以了解代码反转的原因
字符串。