可变地址会因我们是否使用它而改变?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可变地址会因我们是否使用它而改变?相关的知识,希望对你有一定的参考价值。
有人能解释一下吗?
考虑一下这个程序。我们写修改 dest[10]
故意看 j
修改后的值。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char source[] = "Hello";
int j = 100;
char dest[10];
dest[12] = 'A';
printf("j = %d
", j);
fflush(stdout);
printf("j = %d
", j);
fflush(stdout);
printf("*j = %p
", &j); // comment this line to get another result!
return 0;
}
输出。
j = 4259940
j = 4259940
*j = 0x7ffcc4cdef74
但如果我们在显示 j
瓦里巴利地址 printf("*j = %p
", &j);
我们得到。
j = 100
j = 100
这就像 j
储存在其他地方,而不仅仅是在 dest
和第一个例子中的变量一样。
有没有人可以解释一下?
答案
对象的存放位置和是否存放 j
和 dest
中如何处理界外访问的问题。dest[10]
是编译器的选择。现代编译器会做很多复杂的事情来优化程序。当你省略了打印地址的语句时。j
,编译器会做出不同的选择,这些选择会产生不同的结果。
另一答案
一个变量如果不取地址,就不需要有任何存储地址.编译器可以自由地只将值保存在寄存器中,或者通过优化机制将其完全删除,只使用常量值 100
直接。
你可以检查一下你是否损坏了 dest
反之 j
不存储在堆栈上。
以上是关于可变地址会因我们是否使用它而改变?的主要内容,如果未能解决你的问题,请参考以下文章
Python 面试高频问题:可变数据类型和不可变数据类型的区别