指针保存地址分析

以上代码里面有四个指针ptr,ptr2,ptr3,ptr4

ptr,没有被初始化值,所以在.bss数据段,它指向一个int类型数据的地址(还不知道要用来指向哪个int数值的地址)

但是它自己保存的是个地址,所以它自己是long长度的数据,保存在.bss


ptr2,指向foo这个int数据的地址

ptr2是确定类型(保存地址,long),确定数值(指向全局变量foo),所以它自己也是确定的全局变量,所以ptr2在.data数据段。


ptr3,在main函数里保存i的地址,随着main函数的退出,ptr3这个变量的作用范围就消失了,所以它是在main scope里面的自动变量,

它在stack里


ptr4,指向一块heap内存的地址,heap内存本身的这块数据是malloc申请得到的,所以它的scope由用户控制,需要用户来后续free,

所以ptr4在stack里;如果你想在main的外部(比如别的函数里),去获得ptr4这个地址的值,你就必须把ptr4的值传给别的函数。

否则这个地址的值在main以外的地方就丢失了,


综上:所以指针本身也是一个普通的数据

它保存在哪里,和别的变量一样的分析方法











相关文章: