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

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

这是正常的代码段

    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日

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算