- 论坛徽章:
- 0
|
在C中局部变量是在进程虚拟空间中的堆栈区分配的,取他的地址是不是就是他存在于堆栈中的虚存内存地址。那么如果在两次执行时堆栈不同是不是意味着两次局部变量的地址也不同呢? 我指的变量是在堆栈不同的地方分配的
下面时我写的一个程序
#include <stdio.h>;
void main(int argc, char **argv)
{
int count = argc;
while(count >; 0)
{
__asm
{
push eax;
push eax;
push eax;
}
count--;
}
{
int i = 1; //在堆栈中分配i的空间
printf("%d %d \n", &i, i);
}
count = argc;
while(count >; 0)
{
__asm
{
pop eax;
pop eax;
pop eax;
}
count--;
}
}
这个程序根据输入参数数目的不同 向堆栈中压入数目不同的参数,然后再声明变量i,这样两次运行的堆栈情况不同。但实际结果却是对应两次不同个数的参数,i的地址相同。这是怎么回事呢?是不是我的理解有问题?(注 我用的是VC 6.0 操作系统是WIN2k) |
|