c语言指针与数组越界

有人可以帮我简单说一下下面代码的意思吗?感谢!!(我还没有学习到指针)

原本的问题是想知道越界的情况下数据是怎么存储的

#include

int main()

{int a[5];

int*p=a;

p+= 6;

*p =100;

printf("Adrress%d: %d\n\n",p, *p);

for(int i=0;i<7;i++)a[i]=i;

for(int i=0;i<7;i++ )printf("a[%d]=%d\n" ,i,a[i]);

printf("\nAdrress%d: %d" ,p,*p);

return 0;
}

指针

指针可以简单理解成某个元素在内存中存放的地址,有了地址,我们就可以通过星号*拿出这个地址存放的元素。

指针定义的时候要加星号*,如int *p,星号只是为了说明这是一个指针变量而已(不要与前面说的"通过星号拿出地址存放的元素"混淆了,定义时加星号只是标记这是一个指针变量,在后面使用的时候,不加星号就表示地址,加星号就表示地址存放的元素,如p表示地址,*p表示该地址存放的元素)

数组

再说数组,数组名实际上就是数组在内存中的起始位置(代码中int *p=a,就是把数组a起始地址赋值给了指针p),因为数组在内存中是连续存放的,因此有了起始位置,再给一个与起始位置的距离,如a[i](用指针表示相当于*(a+i)),可以把i理解成距离,这样就可以找到某个具体的元素了。

还有越界问题,数组创建的时候实际就是在一大块内存划分出一小块连续的没有使用过的内存给这个数组使用,初始化的时候就在这些分配的内存填上对应的初始值。超出的部分就是没有初始化的,是个随机值。因此越界时,应该会得到一个随机值。

p+= 6; 越界了。*p=a,p指向a第一个元素即a[0],p+6则是a[6],不存在。