指针不会自行归位
在使用指针时,一定要明确指针的所指对象以及指针的位置,以免造成成指针泄漏;
例如:
#include<iostream>
#include<array>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
system("color 3F");
int* p = new int[10];
int* begin = p;
cout << sizeof(p) << endl;
for (int i = 0; i < 10; i++)
{
*p=i;
p = p + 1;
}
//循环结束后,*p=p[9];若此时直接执行输出,则会以当前的位置进行加减操作。
p = begin;//此时指向数组的开始,即p[0];
for (size_t i = 0; i < 10; i++)
{
cout <<"p["<<i<<"]:"<<*p << endl;/*若没有p=begin;则此时p[0]实际是上一循环结束时的p[9],
如果在进行递增输出,则会超界,输出错误的数据;*/
p++;
}
/*int a[10];
int* p = a;
for (size_t i = 0; i < 10; i++)
{
*p = i;
p++;
}
//循环结束,此时*p=p[9];
for (size_t i = 0; i < 10; i++)
{
cout << *p << endl;//输出的是p[9]的值,而不是原数组的a[0]的值;
p++;//超界;
}*/
system("pause");
return 0;
}
总结:指针不能自动归位,进行一次操作之后位置指针所指向的位置就会改变,若没有进行移动操作,指针的所指的是确定。所以再次执行指针操作前,需要判断指针的位置是否正确;