C语言中定义一个变量a,其地址还会不会变了?像a=b,意思是值变了,地址没变?那怎么变化a的地址

C语言中定义一个变量a,其地址还会不会变了?像a=b,意思是值变了,地址没变?那怎么变化a的地址,第1张

变量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的内存模型(即它们在内存中是怎样表示的、关系又是怎样的),理解这些就不难了,你边学边体会吧!

a在main函数中属于一个临时变量,每次在运行程序的时族洞指候,系统会给该变量随机分兆配配一个地址,存储在栈中,当函数运行结束后,在将这个变量的地址收回。所以会出现你颤帆遇到的情况,望采纳~


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12561164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存