gpt4 book ai didi

c++ - 用指针反转字符串是如何工作的

转载 作者:行者123 更新时间:2023-11-30 05:46:43 25 4
gpt4 key购买 nike

我有一个函数,它接受一个字符串,并使用前后指针反转它。现在这是下面编写的程序。我不明白的是 while 循环。当它分配 *front = *rear 和 *rear = temp//which is *front. 我们仍然如何分别递增和递减 front 和 rear。但是我们换了他们不是吗?现在不是前面在后面,后面在前面吗?还是因为它是指针?有人可以给我解释一下吗?

程序:

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

void reverse(char* s);
int main()
{
char aString[] = "babylonia";

cout << " please enter the string " << endl;

reverse(aString);

cout << aString << endl;


}

void reverse(char* s)
{
char *front, *rear, temp;
front = s;
rear = s+strlen(s) - 1;
while( front < rear)
{
temp = *front;
*front = *rear;
*rear = temp;
front++;
rear--;
}

}

最佳答案

front = s//与front = &s[0]相同,指向数组第一个字符的地址。
rear,指向数组最后一个字符的地址。

(These are just example addresses)
|0x23fde8 | 0x23fdf0| 0x23fdf8| 0x23fe00| 0x23fe08| 0x23fe10| 0x23fe18| 0x23fe20| 0x23fe28|
.---------.---------.---------.---------.---------.---------.---------.---------.---------.
| B | A | B | Y | L | O | N | I | A |
'---------'---------'---------'---------'---------'---------'---------'---------'---------'
^ ^

一开始,front指向一个地址,例如0x23fde8rear指向0x23fe28
现在,当你用星号取消引用它时,你可以访问那部分内存,你可以想象一个如上图所示的容器,或者你可以想象你用星号打开容器 *

当您通过执行 front++++front 增加 front 时,它会增加到下一个内存地址位置。同时随着rear----rear 递减到下一个地址位置。它不会更改地址,但当您取消引用它时,您可以访问内容。

在下面您会看到,第一个最后一个 已互换,但地址保持不变

|0x23fde8 | 0x23fdf0| 0x23fdf8| 0x23fe00| 0x23fe08| 0x23fe10| 0x23fe18| 0x23fe20| 0x23fe28|
.---------.---------.---------.---------.---------.---------.---------.---------.---------.
| A | A | B | Y | L | O | N | I | B |
'---------'---------'---------'---------'---------'---------'---------'---------'---------'
^ ^
front rear

我希望这可以帮助您理解 *frontfront 之间的区别

关于c++ - 用指针反转字符串是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28802398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com