其他分享
首页 > 其他分享> > c – 如何使用指针从不同的函数访问局部变量?

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

作者:互联网

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

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函数)或在堆上分配它.如果在堆上分配它,则需要手动释放它,或者使用RAII在C中释放它.

我错过了一个替代方案(可能是这里最好的一个,只要数组不是太大)就是将数组包装成一个结构,从而使它成为一个值类型.然后返回它会创建一个在函数返回后幸存的副本.有关详细信息,请参见tp1answer.

标签:c-3,c,pointers,local-variables
来源: https://codeday.me/bug/20190910/1802210.html