C语言的小实验语法小疑问 用指针建了一个数组 为什么最后结果在p和n的链接部分值为0?

img

    #include<stdio.h>
#include<stdlib.h>

int main()
{

    int *p=(int*)malloc(sizeof(int)*3);
    int *n=(int*)malloc(sizeof(int)*3);
    int x;
    printf("Input:\n");
    for(int i=0;i<3;i++)
    {
        scanf("%d",&x);
        *(p+i)=x;
    }
    *(p+3)=*n;
    for(int i=0;i<3;i++)
    {
        scanf("%d",&x);
        *(n+i)=x;
    }
    for(int i=0;i<7;i++)
    {
        printf("Input:%d\n",*(p+i));
    }
    return 0; 
}

用指针建了一个数组
为什么最后结果在p和n的链接部分值为0?

第15行 *(p+3)=*n; 这里 *(p+3) ,对数组p[] 越界操作了,p[]数组下标0-2。


*(p+3)=*n;  //只有p+3的值发生改变