Detachment_destin 2021-11-24 17:16 采纳率: 81.8%
浏览 32
已结题

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

这是正常的代码段

    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

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

  • 写回答

1条回答 默认 最新

  • 於黾 2021-11-24 17:20
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 修改了问题 11月24日
  • 创建了问题 11月24日