C语言重新赋值内存地址会变吗?

inta=1,假设内存地址为0X01a=2,重新赋值后是重新开一个内存空间0X02存放2,还是直接修改0X01的内容?... int a = 1 ,假设内存地址为0X01
a= 2 , 重新赋值后是重新开一个内存空间0X02存放2,还是直接修改0X01的内容?
展开
 我来答
重庆新华电脑学校
2021-08-13 · 学动漫、设计、电竞、电商、短视频、软件等
重庆新华电脑学校
重庆新华电脑学校隶属于新华教育集团,经重庆市人力资源和社会保障局审批成立的重庆地区大规模IT人才教育基地。是国家信息化教育全国示范基地,中国IT教育十大影响力品牌学校。
向TA提问
展开全部
变量a的地址是不能变的,当程序被加载时,操作系统会为它分配好地址,且一经分配,不能再改变!当然,每一次程序运行时,操作系统为a分配的地址可以不同。

有以下几点常常另初学者感到困惑,现举例加以解释:
int b,c,*a;
a=&b;
语句a=&b;并没有改变a的地址,它只是改变了a这个箱子中装的东西。如果你在语句a=&b;的前后用printf("%d",(int)&a);输出a的地址,就会发现它们是一样的。如果后面再来个a=&c;则printf("%d",(int)&a);的输出也一样!

关键是要区分以下几点:
a,表示a的值,即它装的东西,具体到这个例子,a装的是另一个int型变量的地址。如果a不是const类型的,则它装的东西可以改变。比如,这里先装的是b的地址(指针变量是用来装地址的),后改成了c的。
&a,当然就表示a自己的地址了,你可以将a想象成一个箱子,它的地址就是这个箱子的编号。
*a,因为a是一个指针,*a就表示a指向的变量的值,即b或c的值(具体要看a装的是谁的地址,即a指向谁),也即*a=b或*a=c。

现假设a装的是b的地址,那有:
a=&b,即a的值等于b的地址。
*a=b=*(&b),这里*的作用是取出某个地址中的值。因为a的值是b的地址,因此*a取出的是b的值,同理(&b)是b的地址,*(&b)取出的也是b的值!

分析一下a,b,c的内存模型(即它们在内存中是怎样表示的、关系又是怎样的),理解这些就不难了,你边学边体会吧!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式