gpt4 book ai didi

c++ - 如何使用指针从不同的函数访问局部变量?

转载 作者:行者123 更新时间:2023-11-30 16:17:13 26 4
gpt4 key购买 nike

我可以访问不同函数中的局部变量吗?如果是这样,怎么办?

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。

我错过的一个替代方案(可能是这里最好的一个,前提是数组不是太大)是将数组包装到一个结构中,从而使其成为一种值类型。然后返回它会创建一个在函数返回后仍然存在的拷贝。请参阅tp1answer有关详细信息。

关于c++ - 如何使用指针从不同的函数访问局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56307234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com