问题一,不一样。因为函数内声明的局部变量的内存,是在栈内存中的,函数入栈后,函数内的局部变量的地址,都是相对 基址寄存器(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);
}