C语言题, n 的作用是什么,这个程序是怎么运行的

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
void fun(char *w,int n)
{
    char t,*s1,*s2;
    s1=w;
    s2=w+n-1;
    while(s1<s2)
    {
        t=*s1++;
        *s1=*s2--;
        *s2=t;
    }
} 
int main()
{
    char a[]="123456",*p=a;
    fun(p,strlen(p));
    puts(p);
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

我想知道这个程序是如何运行的

n表示数组的元素个数(数组长度),s1是从第一个元素开始,不断加1,s2是从最后一个元素开始不断减1。