有以下几点常常另初学者感到困惑,现举例加以解释:
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函数中属于一个临时变量,每次在运行程序的时族洞指候,系统会给该变量随机分兆配配一个地址,存储在栈中,当函数运行结束后,在将这个变量的地址收回。所以会出现你颤帆遇到的情况,望采纳~欢迎分享,转载请注明来源:内存溢出
评论列表(0条)