我可以访问不同函数中的局部变量吗?如果是这样,怎么办?
void replaceNumberAndPrint(int array[3]) {
printf("%i\n", array[1]);
printf("%i\n", array[1]);
}
int * getArray() {
int myArray[3] = {4, 65, 23};
return myArray;
}
int main() {
replaceNumberAndPrint(getArray());
}
上面这段代码的输出:
65
4202656
我做错了什么? “4202656”是什么意思?
我是否必须在 replaceNumberAndPrint()
函数中复制整个数组才能比第一次更频繁地访问它?
最佳答案
myArray
是一个局部变量,因此指针仅在其作用域结束之前有效(在本例中是包含函数 getArray
)。如果稍后访问它,您会得到未定义的行为。
实际上,对 printf
的调用会覆盖 myArray
使用的堆栈部分,然后它包含一些其他数据。
要修复代码,您需要在生命周期足够长的作用域中声明数组(示例中的 main
函数),或者在堆上分配它。如果您在堆上分配它,则需要手动释放它,或者在 C++ 中使用 RAII。
我错过的一个替代方案(可能是这里最好的一个,前提是数组不是太大)是将数组包装到一个结构中,从而使其成为一种值类型。然后返回它会创建一个在函数返回后仍然存在的拷贝。请参阅tp1的answer有关详细信息。
关于c++ - 如何使用指针从不同的函数访问局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58473658/