c语言中为什么这样赋值后,两个却一样

#include
#include
typedef struct HH
{
int i;
int j;
struct HH *next;
}HH;

void changeV(HH *p)
{
HH tt;
tt.i=6;
tt.j=2;
tt.next=&p[0];
p[0]=tt;
//tmp->i=1;
//tmp->j=2;
//tmp->next=NULL;
//p[0]=tmp;

}
int main()
{
HH h[5];
for(int i=0;i<5;i++)
{
h[i].i=0;
h[i].j=0;
h[i].next=NULL;
}
changeV(h);
printf("%d\n",h[0].next);
printf("%d\n",&h[0]);
//结果
//-1904858288
//-1904858288

return 0;
}


tt.next=&p[0]; //将tt的next指针指向p[0]的地址
p[0]=tt; //将tt赋值给p[0],此时p[0].i=6,p[0].j=2,p[0].next=&p[0]
然后执行printf("%p\n",h[0].next); //h[0].next就是&p[0],所以两句打印的是一样的(打印地址应该用%p)