c语言,使用指针和函数冒泡排序

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

c语言 vs 2022 无法正确得出结果 要求使用函数和指针将十个数排大小,指针变量作为函数传递值

用代码块功能插入代码,请勿粘贴截图
int main()
{
  void compare(int *p);
  int i = 0;
  int a[10];
  int* p1;
  p1 = a;
  for (i = 0; i < 10; i++)
  scanf("%d",&a[i]);
  for (p1 = a; p1 < (a + 10); p1++)
    printf("%d ", *p1);
  printf("\n");
  compare(p1);
  return 0;
}

void compare(int *p)
{
  int j = 0, i = 0,t=0;
  for (i = 0; i < 10; i++)//冒泡排序
     for (j = 0; j <= i; j++)
    {
        if (*(p + i) < *(p + i + 1))//不知道是不是这样表示
      {
        t = *(p + i);
        *(p + i) = *(p + i +1) ;
        *(p + i + 1) = t;
       }
    }
printf("%d", *(p+10));//打印第十个数
}

运行结果及报错内容

输入1-10,函数中打印第十个数出错

我的解答思路和尝试过的方法

尝试打印第10个数验证结果(不知道怎么打印)

我想要达到的结果

正确打印第十个数

第十个数的下标是9,不是10
printf("%d", *(p+9));//打印第十个数