请问函数内声明的变量每次占用的内存地址都是一样的吗?如果不一样为什么不一样呢?如果是静态变量呢?

2024年12月02日 22:44
有1个网友回答
网友(1):

问题一,不一样。因为函数内声明的局部变量的内存,是在栈内存中的,函数入栈后,函数内的局部变量的地址,都是相对 基址寄存器(EBP)。示例代码:

#include 
void func(unsigned int n) {
int local_var = 0;
std::cout << "address of local_var: 0x" << &local_var << std::endl;
if (n) {
func(n - 1);
}
}
int main() {
func(5);
}

代码中func函数会被调用6次,每次执行,local_var表量的地址都不一样。


问题二,静态局部量,和全局变量一样,都是在整个进程中存在唯一实例的(整个进程中只有一个)。所以在一次程序运行中,地址是不会发生改变的。示例代码:

#include 
void func(unsigned int n) {
static int static_local_var = 0;
std::cout << "address of static_local_var: 0x" << &static_local_var << std::endl;
if (n) {
func(n - 1);
}
}
int main() {
func(5);
}