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

标签 c++ c pointers local-variables

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

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/58473658/

相关文章:

c++ - 为什么 struct with auto_ptr 和显式析构函数无法交换

c++ - 如何将结构放入 union 中

c - 打印在函数中作为参数传递的结构

c - C 中指向字符串的指针数组

c - 将指针传递给字符串,不兼容的指针类型

c - 递归函数在参数不为 NULL 时传递 NULL 指针

c++ - 如何使用 Boost::Phoenix 传递函数参数?

c++ - 使用 no-angle 和 -no-opengl 编译 Qt 时会发生什么?

c - 如何在一个文件中定义一个 C 函数,然后从另一个文件中调用它?

c - 第一个 C 程序 - 需要有关 Eclipse 的帮助