我已经用其他语言编码了一段时间并且非常精通,但现在我更深入地研究 C++ 并且遇到了一些我在其他语言中从未遇到过的奇怪问题。谷歌搜索无法回答的最令人沮丧的问题是两种不同的代码顺序。

背景是我有一个整数数组,一个指针是数组中的一个元素。当我去打印指针时,一种方法打印正确,另一种打印无意义。

第一个代码顺序的示例是:

#include <iostream>

using namespace std;

void main(){
    int *pAry;
    int Ary[5]={2,5,2,6,8};

    pAry=&Ary[3];

    cout<<*pAry<<endl;

    system("pause");
}

它按预期工作。然而,这个简单的顺序不适用于整个项目,因为我希望其他模块访问 pAry,所以我认为全局定义应该有效,因为它适用于其他语言。这是示例:
#include <iostream>

using namespace std;
int *pAry;
void evaluate();

void main(){

    evaluate();
    cout<<*pAry<<endl;

    system("pause");
}

void evaluate(){
    int Ary[5]={2,5,2,6,8};
    pAry=&Ary[3];
}

当我使用第二种方法时,输出是无意义的。特别是 1241908....当答案应该是 6 时。

首先我想知道为什么我的全局方法不起作用,其次我想知道如何使它起作用。谢谢

最佳答案

在第二个示例中, Ary 是函数 evaluate 的局部变量。当 evaluate 返回时,Ary 超出范围,访问它的内存区域会导致未定义的行为。

为避免这种情况,请在尝试访问时仍然有效的范围内声明 Ary

关于c++ - 使用全局变量编程给出错误结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21171246/

10-10 21:29