c语言入门,动态运存,一直输出乱码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int n;
int i, j, temp=0;
scanf_s("%d", &n);
int* p = (int*) malloc(n * sizeof(int));
*p = NULL;
if (p)
{
for (i = 0; i < n; i++)
{
scanf_s("%d", &p[i]);
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i; j++)
{
if (p[j] > p[j + 1])
p[j] = temp;
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
for (i = 0; i < n; i++,p++)
{
printf("%d,", &p[i]);
}

}
free(p);
system("pause");
return 0;

}

你那里刚分配,然后又=NULL,不等于白分配了么