如果一个指针指向的数组发生指针越界时会怎么样呢?
代码:
#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 一个随机数 这样的规律
。
目前学的很浅,不知道原因,这里先记录一下,深入学习后再来更新。