问题描述
案例 1:
#include<iostream>
using namespace std;
int* exp()
{
int a[6]={1,2,3,4,5,6};
return a;
}
int main()
{
int *p=exp();
for(int i=0;i<6;i++)
{
cout<<*p<<" ";
p++;
}
return 0;
}
输出:
#include<iostream>
using namespace std;
int main()
{
int a[6]={1,6};
int *p=a;
for(int i=0;i<6;i++)
{
cout<<*p<<" ";
p++;
}
return 0;
}
输出:
为什么在上述两种情况下结果不同,尽管两种情况下返回的指针地址相同? 另外,我正确地增加了指针(正如我认为的那样),因此在两种情况下它的行为应该相同,但为什么会发生这种情况? 请帮帮我,我不明白这里实际发生了什么。
解决方法
当您在第一种情况下离开函数 exp() 时,a 超出范围,即该数组最初占用的内存可能已被用于其他目的。指向该内存位置的指针不再有效。