
C++中变量的地址什么时候是固定的?主函数中定义的变量,地址为什么是确定的,意思是可以通过地址找到变量
展开全部
声明变量有两种方式
一个是 int a;
一旦运行到声明这个变量的函数时,不是运行到这个语句,操作系统就会为他分配空间,变量a的位置就固定了,直到这个函数运行结束内存释放。
还有一种是
int *p = new int;
运行到这个语句,操作系统就会为你开辟空间,把指针p指向这个空间,这个空间系统为你保留,不会被他人使用,必须手动用Delete释放后,才能被其他程序使用。
一个是 int a;
一旦运行到声明这个变量的函数时,不是运行到这个语句,操作系统就会为他分配空间,变量a的位置就固定了,直到这个函数运行结束内存释放。
还有一种是
int *p = new int;
运行到这个语句,操作系统就会为你开辟空间,把指针p指向这个空间,这个空间系统为你保留,不会被他人使用,必须手动用Delete释放后,才能被其他程序使用。
追问
您说的第一种方式,如果这个变量是在main里声明,然后对这个变量赋值,把这个变量当作调用函数的实参。调用函数的过程中,变量的值改变了,但是返回main中还是原值。这个是为什么?这个变量不是局部变量么,这个地址和地址中变量的值是怎么变化的?谢谢
追答
被调用函数执行时会建立自己的数据空间,会把主函数中的a复制一份到自己的数据空间,返回时这个数据空间就被销毁。不是主函数中的a位置变了,而是被调用函数操纵的a只是原先a的一个副本,占用内存空间是不一样的。
如果要修改值,可以使用指向main函数中a的指针。
展开全部
的变量的地址是确定的,主函数中的是全局变量,存放在静态存储区,所以地址确定
此外static静态变量也是存放在静态存储区,地址固定
其他的auto变量是放在栈中,是随机分配的
此外static静态变量也是存放在静态存储区,地址固定
其他的auto变量是放在栈中,是随机分配的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每次运行后,进程空间是不一样的,因此地址也是不一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询