码迷,mamicode.com
首页 > 其他好文 > 详细

理解各种数据类型和简单类的内存存放.

时间:2016-06-06 13:39:11      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

基本数据类型.int ,char short.


int a;
a 标签代表一个地址的数据,里面的数据类型是int.所以占4个字节.
a=3;
给基本数据类型的标签赋直.就等于给标签代表的地址的数据赋直.
a 标签既然代表一个地址的数据,那么它的地址用&a来获得.
&a: 0x22ff1c: 03 00 00 00
&(&a)会错误.因为&a并不是内存某个地方.

数组类型.


int a[3]
首先,a[0],a[1],a[2] 和基本数据类型一样理解.
a[0] 标签代表一个地址的数据,里面的数据类型是int.所以占4个字节.
所以同上有&(a[0]),&(a[1])
&(a[0]):0x22ff04

到这里可以不再需要知道额外的知识了.数据和地址都可以得到了.

本来a本身没有任何意义了.

但是 &(a[0]) ,代表的首地址对于程序来说作用太大.传参,返回,等等.
所以用a来代表&(a[0]),a+1代表&(a[1])
但是a是地址常量.很多情况想把a改为其他直,以至于出来了指针,相当于把a这个地址常量再放入内存中,用一个(类型 *)的类型来表示.

就是指针类型了.不准确的理解其实就是一个2个字节的地址,存放了一个可变数组的首地址.


指针类型.


char * a="ag!";
首先,a[0],a[1],a[2], *a, *(a+1),*(a+2) 和基本数据类型一样理解.

所以同上有&(a[0]),&(a[1]) a, a+1


*a 标签代表一个地址的数据,里面的数据 占4个字节.存放的是首地址.
定义必须是(类型 * a) .因为只有首地址不行.必须知道存放的是什么类型.取多少字节组成一个数据.


a 标签和数组类型标签类试,代表第一个数据的地址.
c:0x403024

&a 表示 首地址存放的地址.

 


class a;
类的标签的含义和数组类试.只不过不用下标,而用.
a.name a.sex 和基本数据类型一样理解.
所以
&a.isbn: 0x22ff18
如果是简单的类,那么第一个数据的地址就是,类的地址
&a:0x22ff18


直类型做行参.
void change(Sales_item b)
会把类的成员变量作为参数全部入栈. 当然就不会修改函数外对象.

movb $0x62,0x18(%esp)
0x00401347 movl $0x3,0x1c(%esp)
0x0040134F mov 0x18(%esp),%eax//
0x00401353 mov 0x1c(%esp),%edx
0x00401357 mov %eax,(%esp)//类的数据成员入栈
0x0040135A mov %edx,0x4(%esp)//类的数据成员入栈
0x0040135E call 0x40136a <change(Sales_item)>

 

引用类型
void change(Sales_item &b)

0x00401342 movb $0x62,0x14(%esp)
0x00401347 movl $0x3,0x18(%esp)
0x0040134F lea 0x14(%esp),%eax//注意lea指令.这里是把地址入栈. 而且是类对象的第一个数据成员的地址,应该就是类的地址.
0x00401353 mov %eax,(%esp)
0x00401356 call 0x40136a <change(Sales_item&)>

理解各种数据类型和简单类的内存存放.

标签:

原文地址:http://www.cnblogs.com/lsfv/p/5563392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!