请问各位为什么程序输入后会引发异常呀?是循环有问题吗

/* 编写一个程序, 用指针方法对 10 个整数按由大到小顺序排序,要求使用选择
排序法。 (指针、数组、排序算法)*/
#include<stdio.h>
#define N 10
int main()
{
int a[N];
int* p;
p = a;
int i,j,k,temp;
for (i = 0; i < N; i++,p++)
scanf_s("%d", p);
for (i = 0; i < N-1; i++)
{ k = i;
for (j = i + 1; j < N; j++)
if (*(p+j) > *(p+k))
k = j;
temp = *(p+i); *(p+i) = *(p+k); *(p+k) = temp;
}
for(p=a;p<(a+N);p++)//for(p=a,i=0;i<N;i++,p++)
printf("%d", *p);
return 0;
}

#include<stdio.h>
#define N 5

void prin(int *p,int n)
{
    int i;
    for(i=0; i<N; i++) //for(p=a,i=0;i<N;i++,p++)
        printf("%d ", *(p+i));
    printf("\n");
}

int main()
{
    int a[N];
    int* p;
    p = a;
    int i,j,k,temp;
    for (i = 0; i < N; i++)
        scanf("%d", &*(p+i));
    k = *p;
    int b=0;
    for (i = 0; i < N; i++)
    {
        b=0;
        for (j = 0; j < N-i; j++)
            if (*(p+j) > *(p+b))
            {
                b=j;
            }
        //printf("max:%d  b:%d  \n", *(p+b),b);
        temp = *(p+(N-i-1));
        *(p+(N-i-1)) =*(p+b);
        *(p+b)=temp;
    }
    prin(p,N);
    return 0;
}

你是想输入a[i]吧,输入成p了,p是指针

#include<stdio.h>
#define N 5

void prin(int *p,int n)
{
int i;
for(i=0; i<N; i++) //for(p=a,i=0;i<N;i++,p++)
printf("%d ", *(p+i));
printf("\n");
}

int main()
{
int a[N];
int* p;
p = a;
int i,j,k,temp;
for (i = 0; i < N; i++)
scanf("%d", &*(p+i));
k = *p;
int b=0;
for (i = 0; i < N; i++)
{
b=0;
for (j = 0; j < N-i; j++)
if (*(p+j) > *(p+b))
{
b=j;
}
//printf("max:%d b:%d \n", *(p+b),b);
temp = *(p+(N-i-1));
(p+(N-i-1)) =(p+b);
*(p+b)=temp;
}
prin(p,N);
return 0;
}