输出后的结果为什么是0

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

为什么输出结果都是0

用代码块功能插入代码,请勿粘贴截图
#pragma warning(disable : 4996) 
#include
#define N 5

struct Student
{
    long num;
    char name[20];
    int score[3];
}st[N];


int main()
{
    struct Student* input(struct Student* p);
    void print(struct Student* pt);
    print(input(st));                  //为什么这样写不行?结果输出错误
    return 0;
}

struct Student* input(struct Student* p)
{
    int i;
    for (i = 0; i < N; i++, p++)
    {
        printf("enter the data for the %dth student\n", i + 1);
        scanf("%ld %s %d %d %d", &p->num, p->name, &p->score[0], &p->score[1], &p->score[2]);
        printf("\n");
    }
    return p;
}

void print(struct Student* pt)
{
    int i;
    for (i = 0; i < N; i++, pt++)
    {
        printf("num:%ld\tname:%s\tscore:%d\t%d\t%d\n", pt->num, pt->name, pt->score[0], pt->score[1], pt->score[2]);
    }
}

运行结果及报错内容
enter the data for the 1th student
101 Li 90 79 89

enter the data for the 2th student
102 Ma 97 90 68

enter the data for the 3th student
103 Wang 77 70 78

enter the data for the 4th student
104 Fun 67 89 56

enter the data for the 5th student
105 Xue 87 65 69

num:0   name:   score:0 0       0
num:0   name:   score:0 0       0
num:0   name:   score:0 0       0
num:0   name:   score:0 0       0
num:0   name:   score:0 0       0

因为在执行完input函数后指针p已经指超出数组的范围了,而此时又把它返回到print函数里面了。

你这p一直在++啊,return时p已经指向数组后面的内存了