字符串右移2次,这个指针是怎么回事啊


#include <stdio.h>
#include <string.h>

void RightLoopMove(char *s)
{
    int i = 0;
    int t = 2;
    int l;
    l = strlen(s); // 取字符串长度

    while(t--)// 字符串右移2次
    {
        char *pend = s + l - 1;
        char tmp = *(s + l - 1);
        while (s <= pend)
        {
            *pend = *(pend - 1);
            pend--;
        }
        *s = tmp;
    }
}



int main(){
   char s[26];
   scanf("%s",s);
  
    printf("%s\n",s);
    int l;
    l = strlen(s);
    for(int i = 0; i < l-1; i++){
       RightLoopMove(s);
       printf("%s\n",s);
    }
   return 0;
   
}

char *pend = s + l - 1;
为什么char *pend 后面是字符串加上整数
还有这句
char tmp = *(s + l - 1);
以及这个循环是为什么能够成立
字符串之间的比较怎么限定
while (s <= pend)
{
*pend = *(pend - 1);
pend--;
}

供参考:

char *pend = s + l - 1;  首先 char *pend,这里定义一个指针变量  pend
                         s是形参 char *s ,也是一个指针变量,因为是形参,主函数传过来的是字符串s的首地址
                         l=strlen(s),l 就得到了字符串的长度值
                         pend = s + l -1 ==>就让  pend 指针指向了字符串 s 的尾部。

char tmp = *(s + l - 1); char tmp ,这里定义了一个字符变量 tmp
                         (s + l - 1)这个的意思和上面相同,这个地址值就是字符串 s 的最末尾的地址
                         *(s + l - 1),前面加 ‘*’,就是取得括号(地址)里的值
                         tmp = *(s+l-1)==>就是把 字符串 s 最末位的字符赋值给 tmp

while (s <= pend)    s是字符串首地址,其实就是一个数字,我们假定这个数字为 0 ,pend 是字符串末地址,我们假定
                     它为 6while(0 <= 6 )这个条件成立,就可以循环了。然后,在循环体里,每次我们让s保持
                     不变,而让 pend 每次减一,6 一直减 到 -1 时,while(s <= pend)条件不满足了,退出循环。