一个变量初始化后,该变量在内存中的地址也就确定下来,这句话是什么意思
一个变量初始化后,该变量在内存中的地址也就确定下来,这句话是什么意思-----------------------------------------------------------------------
书上说,编译时,变量的内存地址就确定了,可是内存是动态分配的呀,为什么说编译时能够确定内存地址,永不变化呢?
书上原话是:
如果在程序中定义了一个变量,在编译时系统就会给这个变量分配内存单元,并根据程序中定义的变量类型,分配一定长度的内存空间.需要注意的是:一个变量初始化后,该变量在内存中的地址也就确定下来,不管以后对该变量如何赋值,在程序运行期间,变量的内存地址总是固定不变的。
我不知如何理解书上的话,
一个变量初始化后,该变量在内存中的地址也就确定下来,这句话是什么意思,下面哪种说法比较靠谱:
1。在编译时,变量在内存中的地址就确定下来了。
2。int a; 时,即定义变量时(此时只是定义,并没有为变量赋值,变量在内存中的地址能固定下来吗?)
3。int a=5; 时,此时变量在内存中的地址被固定下来。
----------------解决方案--------------------------------------------------------
买了房子,房子的位置就定下来了。
至于这个房子住什么人可以变,可房子的地址不会变。
这个房子就是变量。
----------------解决方案--------------------------------------------------------
我想问,单纯的定义变量,但是不赋值,变量地址固定得下来吗?
如:int a;
或者必须定义且给初值,才能固定变量地址:
如:int a=5;
----------------解决方案--------------------------------------------------------
void fun()
{
int a=0; //这个a,只要这个函数不被调用,地址就不确定
//或者,不同时刻调用,a的地址也不一定相同
}
----------------解决方案--------------------------------------------------------
int a; 时,此时能固定变量在内存中的地址吗?
还是必须:
int a=5;时,即给定一个初值5时,变量地址才固定下来.
请大家明示,就是这两种情况我不明白.
看来,编译时是不会确定内存地址的.
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]Q1007665007[/un] 在 2008-5-17 01:26 的发言:[/bo]
void fun()
{
int a=0; //这个a,只要这个函数不被调用,地址就不确定
//或者,不同时刻调用,a的地址也不一定相同
}
void fun()
{
int a=0; //这个a,只要这个函数不被调用,地址就不确定
//或者,不同时刻调用,a的地址也不一定相同
}
void fun()
{
int a; //此时a没有给初值,当这个函数被调用时,地址能确定下来吗?
}
----------------解决方案--------------------------------------------------------
变量存在于四个段中,Heap、Stack、Data和BSS。
对于函数中的变量,未初始化的在BSS段中,初始化的在Stack段中。
动态申请的变量或数组空间在Heap段中。
全局变量在Data段中。
大家看看是不是这样。
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]ggyy66[/un] 在 2008-5-17 11:06 的发言:[/bo]
void fun()
{
int a; //此时a没有给初值,当这个函数被调用时,地址能确定下来吗?
}
void fun()
{
int a; //此时a没有给初值,当这个函数被调用时,地址能确定下来吗?
}
有解吗?
----------------解决方案--------------------------------------------------------
int a; 时,即定义变量时变量在内存中的地址会固定,只是值不确定
----------------解决方案--------------------------------------------------------