三个指针的值为什么变了?

#include
char replaceblank(char s[]);

char replaceblank(char *s) {
char *ret = s;
char *rett = s;
int oldsize = 0;
int newsize = 0;

while (*ret!= '\0')
{
    ++oldsize;
    if (*ret = ' ') {
        newsize += 2;
    }
    else {
        ++newsize;
    }
    ret++;

}
printf("%d\n", oldsize);
printf("%d\n", newsize);

int indexofold = oldsize;
int indexofnew = newsize;

char *r;
rett = s + oldsize - 1;
r = s + newsize - 1;

while (rett!=r)
{
    if (*rett == ' ')
    {
        *r-- = '0';
        *r-- = '2';
        *r-- = '%';
    }
    else {
        *r--= *rett--;
    }


}

return s;

}

void main() {
char s[] = "we are";
printf("%s\n", s);
printf("%s\n", replaceblank(s));
}

上面是我的程序,主要是s,rett,ret这三个指针变量的值,在执行下面这段程序前,值是we re:
while (*ret!= '\0')
{
++oldsize;
if (*ret = ' ') {
newsize += 2;
}
else {
++newsize;
}
ret++;

    这个循环执行第一次后,三个值一起变成 e are;
    ![图片说明](https://img-ask.csdn.net/upload/201708/10/1502372254_610518.png
    求解答

if (*ret = ' ')
你这里给它赋值成空了
改成 ==

三个指针指向的都是一个地址

三个值一起变...
我的编译器是只有ret变
但是s和rett的地址虽然没有变 输出变的和ret一样 只是多了几个空格
因为ret的偏移 s 和 rett 前面的值变为null
你这个函数是引用传递会改变主函数变量的值 执行完你的循环 主函数的变量也为null了
我也不太懂为什么一个指针的移动会使指针原来指的值变为null