C语言编程,vs显示读取访问权限冲突,我找不到哪里错了,还请大家看看

问题遇到的现象和发生背景

做练习题:(使用指针编写程序)完成以下功能:对一组数s[7]={6,8,1,2,9,7,4},按由大到小排序。

问题相关代码,请勿粘贴截图
#include<stdio.h>
int main()
{
    int s[7] = { 6,8,1,2,9,7,4 }, i, j,t;
    int* p;
    p = &s[0];
    for (j = 0; j <= 5; j++)
    {
        for (i = 0; i <= 5 ; i++)
        {
            if (*p < *(p + 4))
            {                
                t = *p;
                *p = *(p + 4);
                *(p + 4) = t;
            }
            p = p + 4;
        }
    }
    for (i = 0; i <= 6; i++)
    {
        printf("%2d", s[i]);
    }
    return 0;
}

运行结果及报错内容

读取访问权限冲突

我的解答思路和尝试过的方法
我想要达到的结果

p+1就是指向数组下一个元素了,p+4是下第四个元素。
每次外循环都要把p的位置复原到s[0],不然就越界了