变量 数组 指针 在内存上的对应关系

                                   内存可以想象成map (STL) 

内存地址-MAPID

内存地址上存储的数据-MapID对应存储的数据

 

 

 

 

 

 

0012FF7C

0

0012FF7B

0

0012FF7A

0

0012FF79

10 (十进制16的十六进制数)

              Int i =16         栈向上生长,高地址向低地址分配空间

               Int 4字节    一般内存由字节为单位

Int 可以理解为是一个结构体

Typedef int

{

       内存地址                        &I 取得是int结构中的地址

       内存地址所存储数据

}

 

Int* p = &i.          定义一个int型指针,它指向了int型变量的地址 

 

 

 

 

 

 

0012FF7C

0

0012FF7B

0

0012FF7A

0

0012FF79  p

10             *p

     P相当于是地址                        *p相当于是 内存地址上存储的数据

 

变量 I   对应了内存的地址与地址上存储的数据

      &I  对应了内存地址

指针 p   对应变量i的地址

       *p  对应了i内存地址上所存储的数据

当然 指针不是一直在那里 他是可以移动的,可以指向别的内存

这里仅举出了int*类型指针,但是其他的道理是一样的,例如:

typedef struct

{

   int a1;

   int a2;

}st_test,*pst_test;

st_test st1;           当这个结构体创建对象的时候,跟上面定义整形变量i一样

int     i;

分配内存情况:

 

 

0012FF80

 

0012FF7F

 

0012FF7E

 

0012FF7D 

 

0012FF7C

 

0012FF7B

 

0012FF7A

 

0012FF79 

  

st1.a1分配了4个内存地址 
st1.a2分配了4个内存地址   总计分配了8个内存地址空间 

这里pst_test指向了向他们分配的地址. 其他的不用再多说了吧。

对于数组与指针:

数组要么在静态存储区被创建(如全局数组),要么在栈上创建.数组名对应着(而不是指向)一块内存,例如 int a[2];内存分配:

 

 

0012FF80

 

0012FF7F

 

0012FF7E

 

0012FF7D 

 

0012FF7C

 

0012FF7B

 

0012FF7A

 

0012FF79 

  

分别对应着a[0],a[1]
其地址与容量 在生命周期内固定不变的。

而指针可以随时指向任何类型的内存块,它的特征是可变,灵活但危险。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值