我已经用其他语言编码了一段时间并且非常精通,但现在我更深入地研究 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/