为什么在递增接收数组地址的指针时,其行为与已使用该地址初始化的指针不同?

问题描述

案例 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;
}

输出

Output for Case:1

#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;
}

输出

Output for Case:2

为什么在上述两种情况下结果不同,尽管两种情况下返回的指针地址相同? 另外,我正确地增加了指针(正如我认为的那样),因此在两种情况下它的行为应该相同,但为什么会发生这种情况? 请帮帮我,我不明白这里实际发生了什么。

解决方法

当您在第一种情况下离开函数 exp() 时,a 超出范围,即该数组最初占用的内存可能已被用于其他目的。指向该内存位置的指针不再有效。