C++ 指针越界的小实验

如果一个指针指向的数组发生指针越界时会怎么样呢?
代码:

#include <iostream>
using namespace std;


int main() {  
    int arr[5] = {1, 2, 3, 4, 5};  
    int *p = arr;  // 指针指向数组的第一个元素

    printf("%d\n", (p + 4));   // 访问正常,一个固定的数 6487568
    printf("%d\n", *(p + 4));  // 访问正常,一个固定的数 5

    //边界+1访问
    printf("%d\n", (p + 5));   // 访问越界,一个固定的数 6487572
    printf("%d\n", *(p + 5));  // 访问越界, 一个固定的数 0

    //边界+2访问
    printf("%d\n", (p + 6));   // 访问越界,一个固定的数 6487576
    printf("%d\n", *(p + 6));  // 访问越界,一个固定的数 6487552

    //边界+3访问
    printf("%d\n", (p + 7));   // 访问越界,一个固定的数 6487580
    printf("%d\n", *(p + 7));  // 访问越界,一个固定的数 0

    //边界+4访问
    printf("%d\n", (p + 8));   // 访问越界,一个固定的数 6487584
    printf("%d\n", *(p + 8));  // 访问越界,一个固定的数 6561072

    //边界+5访问
    printf("%d\n", (p + 9));   // 访问越界,一个固定的数 6487588
    printf("%d\n", *(p + 9));  // 访问越界,一个固定的数 0

    system("pause");
    return 0;  
}

可以看出一点规律,即使指针访问越界,指针本身的值(地址)也是在以int大小(4)逐渐增加的,而它的解引用却比较奇怪,从边界+1的位置开始,呈现出 0 一个随机数 0 一个随机数 这样的规律
目前学的很浅,不知道原因,这里先记录一下,深入学习后再来更新。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值