【问题标题】:Why when incrementing a pointer which received an address of an array behaves differently from the one that has been initialized with the address?为什么当递增接收到数组地址的指针时,其行为与使用该地址初始化的指针不同?
【发布时间】:2021-08-17 20:25:27
【问题描述】:

案例一:

#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,2,3,4,5,6};
    
    int *p=a;
    
    for(int i=0;i<6;i++)
    {
        cout<<*p<<" ";
        p++;
    }
    
    return 0;
}

输出:

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

【问题讨论】:

    标签: arrays pointers dev-c++


    【解决方案1】:

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

    【讨论】:

    • 为了澄清,堆栈分配的数组在函数的堆栈帧被销毁之前被销毁。访问未分配的内存是未定义的行为。
    • 伟大而中肯的解释@StewartSmith。我现在明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多