小知识——指针跑到数组外了会怎样
Posted 打喷嚏的蝴蝶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小知识——指针跑到数组外了会怎样相关的知识,希望对你有一定的参考价值。
指针跑到数组外了会怎样
当指针指向数组,开启for循环之后,指针不小心跑到数组外了会怎么样?
先说结论:解引用后的元素超出的部分会乱码,但指向的地址跟数组内的地址是连在一起的
之前我在学指针和数组的关系的时候,把指针的位置搞错了,例如下面:
#include<iostream>
using namespace std;
int main()
//指针和数组
//利用指针访问数组中的元素
int arr[10] = 1,2,3,4,5,6,7,8,9,10 ;
cout << "第一个元素为:" << arr[0] << endl;
int* p = arr;//arr就是数组的首地址
cout << "利用指针访问第一个元素:" << *p << endl;
p++;//让指针向后偏移4个字节
cout << "利用指针访问第二个元素:" << *p << endl;
for (int i = 0; i < 10; i++)
//打印数组
cout << p[i] << endl;
system("pause");
return 0;
我忘了指针已经指向了数组的第二个元素了,然后打印出来的数组最后面就乱码了
可笑的是,我直到写这文章前还以为地址也乱跑了,甚至还去验证了,然后…
for (int i = 0; i < 10; i++)
//打印数组地址
cout << p << endl;
p++;
事实证明我是错的,还是没过脑子
总结:
由于指针的+1是按照数据类型所占字节往后移动字节,所以打印出来的地址是跟数组连续的,并不会跑偏
而因为最后一个地址已经不在数组内了,所以解引用之后会出现乱码
所以,实践才能得出真理,不实践也就不知道自己错得多离谱
感谢观看,持续学习,持续进步
以上是关于小知识——指针跑到数组外了会怎样的主要内容,如果未能解决你的问题,请参考以下文章