C++ 理解C/C+中的指针+;

C++ 理解C/C+中的指针+;,c++,c,pointers,C++,C,Pointers,我试图理解指针是如何工作的,但我被困在这条线上了 for (p = s + strlen(s) - 1; s < p; s++, p--) (p=s+strlen(s)-1;s

我试图理解指针是如何工作的,但我被困在这条线上了

for (p = s + strlen(s) - 1; s < p; s++, p--)
(p=s+strlen(s)-1;s 我不明白p等于什么。 有人能帮我吗

这是完整的代码

void Reverse(char *s){
    char c, *p;

    for (p = s + strlen(s) - 1; s < p; s++, p--){
        c = *s;
        *s = *p;
        *p = c;
    }
}


int main(){
    char ch[] = "!dlroW olleH";
    Reverse(ch);
    printf("%s", ch);

    return 0;

}
void Reverse(字符*s){
字符c,*p;
对于(p=s+strlen(s)-1;s
在语句中:
用于(p=s+strlen(s)-1;s

因此在开始时,
p=s+strlen(s)
只分配一次,并转换为
p=+

然后,
s
增加他的位置,
p
减少他的位置

for
循环位置中,它们只是使用
c
之类的临时变量交换字符

单词
hello
的示例:

1) hello
2) oellh
3) olleh

在本例中,for循环在s中反向运行,因为其思想是反转保存在s中的数据。P被分配到s的最后一个内存位置,尽管指针算法(代码中的P)正在向后遍历s。为了访问每个内存位置中的数据,指针s和p通过在每个变量(*p)前面放置*来取消引用


这是否更清楚

使用调试器并找出答案。没有C/C++语言。p不相等,它被指定为“指针算术”。这是一个关于这个话题的问题。一旦你理解了这一点,你就会看到
p=s+strlen(s)-1
p
设置为指向
s
字符串中的最后一个(非NUL)字符。@kaylum,好的,我要读一下。我对s+strlens感到困惑。s是什么?地址。函数strlen(s)-1是字符数?我更新了答案。可以理解吗?是的!非常感谢你!当你指的是“指针”时,你也不能说“参考”。这很令人困惑,而且在一个问题上确实是错误的。@PreferenceBean严格地说,你是对的。我有更广泛的背景,我不仅使用了
c
,而且我修改了答案以符合术语。
1) hello
2) oellh
3) olleh