【发布时间】:2021-11-12 17:16:22
【问题描述】:
我有以下 C 代码:
void testA() {
int x = 56;
printf("Address of x = 0x%x - Value of x = %d\n",&x,x);
}
void testB() {
int y;
printf("Address of y = 0x%x - Value of y = %d\n",&y,y);
}
int main() {
testA();
testB();
return 0;
}
打印结果如下:
Address of x = 0x61fdec - Value of x = 56
Address of y = 0x61fdec - Value of y = 56
为什么testB() 的局部变量y 与testA() 的局部变量x 的地址相同,并且也继承了它的值?它们甚至不在同一个范围内,而且都不是全局变量。
【问题讨论】:
-
不能同时存在,为什么不能共享地址?
-
访问未初始化的变量会导致不确定的值。这些变量位于堆栈或寄存器中。当函数退出时,堆栈/寄存器可能会或可能会在下一次函数调用中再次使用之前被覆盖。如果下一个函数使用相同的堆栈/寄存器,则结果值是不确定的。可能与前一个函数设置的相同,也可能是其他随机值。
-
@kaylum 我的问题是关于地址和存储在其中的值的相似性,而不是关于未定义变量的未定义行为
-
问题是推测未定义的行为。关于未定义行为的推测基本上没有意义。
标签: c pointers memory memory-address local-variables