C语言,关于指针数组的输出

为什么输出时的指针那里不带号,不带可以编译成功,而带*则显示错误

img

img

#include<stdio.h>
struct students{ 
            int    num;
            char  name[15];
            char  sex;
               int    age;
            double grade;
        };
int main(void)
{
    int n, i, j;
    struct students stu[10], *p[10], temp;
    scanf("%d", &n);
    for(i=0;i<n;i++){
        scanf("%d %s %c %d %lf", &stu[i].num, stu[i].name, &stu[i].sex, &stu[i].age, &stu[i].grade);
        p[i] = &stu[i];
    }
    for(i=0;i<n;i++){
        for(j=0;j<n-1;j++){
            if(p[j]->grade<p[j+1]->grade){
                temp=*p[j+1];
                *p[j+1]=*p[j];
                *p[j]=temp;
            }
        }
    }
    for(i=0;i<=n;i++){
    printf("%d %s %c %d %0.1f\n", p[i]->num, p[i]->name, p[i]->sex, p[i]->age, p[i]->grade);
    }
}

用指针访问结构体成员有两种方法,

p->name
或者
(*p).name

->运算符本来就是用于指针的访问,不用加星号
帮忙采纳一下,谢谢!