【发布时间】:2016-04-01 17:58:20
【问题描述】:
我只是在 C 上闲逛,因为我刚刚了解了更多关于指针的知识。但我主要的困惑是关于地址,我只是检查随机变量地址,这就是我发现的。
#include<stdio.h>
#include<conio.h>
int main()
{
int x=5;
int y=4;
int z=8;
printf("%p\n",&x);
printf("%p\n",&y);
printf("%p\n",&z);
}
此代码显示了 3 个不同的地址,这是意料之中的。如果我只有一个 printf 语句,像这样
printf("%p\n",&x);
它将向我显示其中一个地址,这也是预期的。但是,如果我删除变量“x”,并使用另一个变量,如“y”或“z”,它将显示与“x”完全相同的地址。这怎么可能?
所以基本上,当您检查同一代码中所有变量的地址时,每个变量的地址都会不同。如果您分别检查它们中的每一个,它们将具有完全相同的地址。
PS:这只发生在整数和浮点数上,我用 char 尝试了同样的方法,每个变量都给出了一个单独的地址。
【问题讨论】:
-
编译器会剔除未使用的变量
-
答案似乎没有回答问题,我理解这意味着您已经从代码中完全删除了
x,而y现在拥有x之前的地址。 " 如果我删除变量x..." 想象一个倾斜的架子,上面放着 3 个杯子。当您移除最低的杯子时,其他杯子会向下滑动以占据之前使用的空间。 -
添加几行代码,确保所有三个变量都被使用
x += y;x += z;然后尝试打印单个变量地址并查看差异。
标签: c