C++ 多次声明局部变量的地址有关问题

C++ 多次声明局部变量的地址问题
例如:
int  x = 10;
void   func
{
        int i;
        i = x;
        p = &i;
}

这个func的函数可能N次运行   p 取 i 的地址    但是每次 p 取的地址都相同    

但是 i 是每次都会重新声明定义的  为什么地址会相同呢

如何才能让每次 i 的地址不同
------解决思路----------------------
你呼叫这个函数在不同的堆栈位置。
也就是在不同的流程上,否者,i的位置永远在相同的堆栈指针上。
------解决思路----------------------
不相同吧

举例如下
#include<stdio.h>

int  x = 10;

void   func(){

int i;
int *p = &i;
static int k=0;
i = x;
printf("func:p= %p,i=%d ,k=%d\n\t",p,i,k++);
}
void last(){
int k=0,l=0;
printf("last: &k=%p,&l=%p\n\t\t",&k,&l);
func();
}
void first(){
int k=0,l=0;
printf("first start: &k=%p,&l=%p\n\t",&k,&l);
func();
printf("first middle: &k=%p,&l=%p\n\t",&k,&l);
last();
}

int main(int argc, char* argv[])
{
printf("main start\n");
func();
first();
printf("\nmain end\n");
getchar();
return 0;
}

------解决思路----------------------
这只是一种巧合,上一次函数调用完后,释放了相应资源,下一次调用又用了相同的地方,你可以试下再用另一个函数去调用他,他的值一般就不同了
------解决思路----------------------
C++  多次声明局部变量的地址有关问题理解讨论之前请先学会如何观察

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
C++  多次声明局部变量的地址有关问题多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

------解决思路----------------------
引用:
C++  多次声明局部变量的地址有关问题理解讨论之前请先学会如何观察

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
C++  多次声明局部变量的地址有关问题多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)


单步Debug版对应汇编千行不如单步Release版对应汇编一行!
是由于Release会做优化处理么?
------解决思路----------------------
call it in different threads