为什么在C中每次执行后变量的地址都会发生变化?

int i=10; printf("Address of i = %u",&i); Output: Address if i = 3220204848 Output on re-execution: Address of i = 3216532594 

每次执行程序时, i都会得到一个新的地址。 这意味着什么?

它表示每次运行程序时都会加载一个不同的(虚拟)地址。 这是一种称为地址空间布局随机化(ASLR)的function,是大多数现代操作系统的一项function。

这就是操作系统的工作方式。 当你声明一个变量时,你要求底层系统分配一个内存块(地址)来存储那些数据(或者如果你正在处理指针那么指向另一个块的指针,但是这里你有一个原语,所以它只是存储数据)。 程序并不关心内存的位置,只关系它存在,因为它知道如何跟踪它所给出的内容。

作为程序员,除非你做一些令人难以置信的低级工作,否则这真的不是什么大不了的事。 对大多数人来说,最难掌握的是,当你使用指针时,你不能用与原语相同的方式来区分事物,因为指针会考虑它们的值(当使用==作为赤道时)他们的记忆地址。

在c程序执行时,另一个进程正在运行。再次执行代码时,您将分配新地址,之前分配的地址将分配给另一个进程。