如何使用 C++ 指针访问不同函数中的局部变量?
一旦局部变量超出其作用域,你就无法访问它。这就是局部变量的含义。但是,让我们来看一个你 *可能* 能够在其作用域之外访问局部变量内存的示例。
示例
#include<iostream>
int* foo() {
int x = 3;
return &x;
}
int main() {
int* address = foo();
cout << *address;
*address = 12;
cout << *address;
}输出
这可能会给出以下输出:
3 12
正如我之前提到的,这段代码 *可能* 会运行。我们只是读取和写入曾经是 x 地址的内存。在 main 函数中,你在 foo 函数的作用域之外,该地址是指向某个随机内存区域的指针。在上面的示例中,该内存区域确实存在,并且目前没有任何其他内容正在使用它。你继续使用它不会破坏任何东西(你不会使用另一个进程的内存区域或任何其他未经授权的内存区域),并且没有任何其他内容覆盖它。因此,3 仍然在那里。
在一个真实的程序中,该内存可能几乎立即被重新使用,如果你这样做,你可能会破坏某些东西。这种内存访问错误非常难以追踪和解决。
当你从 foo 函数返回时,程序会告诉操作系统 x 的内存不再被使用,可以重新分配给其他内容。如果你幸运,它被重新分配,并且操作系统没有发现你再次使用它,那么你就可以逃过一劫。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP