关于指针超出范围的一个小问题

这是正常的代码段

    int a[10]={1,3,5,7,9,11,13,15,17,19};
    int sum1=0,sum2=0;
    int *p=&a[0];

    while(p<&a[10])
    {
        sum1+=*p++;
    }
    printf("%d\n",sum1);

输出为100

这是指针超限的代码段


int a[10]={1,3,5,7,9,11,13,15,17,19};
    int sum1=0,sum2=0;
    int *p=&a[0];

    while(p<&a[10])
    {
        sum1+=*++p;
    }
    printf("%d\n",sum1);

输出为136

疑问:这最后的指针指向的是什么?

其实就是从a[0]加到a[9]和从a[1]加到a[10]的区别
a[10]没定义,但是c语言是基于指针的,它直接寻址,不检测指针到底是干啥的
所以它大概率会指向sum1,因为sum1是紧跟着数组定义的,地址一般也会连续
但也不一定。如果不连续,那就是个内存里不知道什么程序遗留下来的数据,是个随机数。