一个指针变量到底占几个字节word资料3页.doc

上传人:1595****071 文档编号:33893372 上传时间:2022-08-12 格式:DOC 页数:3 大小:153.50KB
返回 下载 相关 举报
一个指针变量到底占几个字节word资料3页.doc_第1页
第1页 / 共3页
一个指针变量到底占几个字节word资料3页.doc_第2页
第2页 / 共3页
点击查看更多>>
资源描述

《一个指针变量到底占几个字节word资料3页.doc》由会员分享,可在线阅读,更多相关《一个指针变量到底占几个字节word资料3页.doc(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、如有侵权,请联系网站删除,仅供学习与交流一个指针变量到底占几个字节【精品文档】第 3 页一个指针变量到底占几个字节?问:一个指针变量到底占几个字节?答:因机器不同所占的字节数也有所不同。在32位的机器上,一个指针变量占4个字节,在64位的机器上,一个指针变量占8个字节。先看一个例子:#includeInt main(void) char ch =A; int i = 99; double x = 66.6; char *p = &ch; int * q = &i; double * r =&x; Printf(“%d %d %d n”,sizeof(p),sizeof(q),sizeof(r)

2、; return 0;上述代码中,定义了3个变量,分别是char、int、double类型,还定义了3个指针变量p、q、r,分别指向char、int、double类型。然后输出这3个指针变量的值。按理说,char占1个字节,int占4个字节,double占8个字节,当然分别指向它们的指针变量所占的字节数应该是不同的。可是,果真是这样吗?编译后运行,我们得到结果:4 4 4 。也就是说,分别指向3个不同类型的指针变量它们所占的字节数是相同的,都是4个字节。这是为什么呢?首先,我们来看一看ch 、i、x这3个变量在内存中是如何存储的。xriqchpP指向ch,q指向i,r指向x,ch占1个字节,i

3、占4个字节,r占8个字节,那么是不是p指向了1个字节,q指向了4个字节,r指向了8个字节呢?当然不是。首先要明白的是,在硬件层面上,最小的单位不是位,而是字节。所以地址不是以位来表示的,而是以字节来表示的。以上图的x变量为例。因为x占了8个字节,所以在地址编号上,它有8个编号。(一个字节一个编号嘛),既然r指向了x,那么r是不是同时指向了这8个编号呢?不是。r是指向了这8个编号当中的第一个编号。即x的首地址。我们一般都是以一个变量的首地址来表示整个变量的。同理,q指向了i,但它并不是同时指向了4个字节,只是指向了i的首地址。ch就不用说了,因为它只占一个字节。为什么r明明只指向了1个字节,但是

4、它却可以表示8个字节?为什么q只指向了1个字节,但是它却可以表示4个字节?我为什么不能说r表示的是从它指向的那个字节开始的4个?我为什么不能说q表示的是从它指向的那个字节开始的2个?这是由什么来决定的呢?答案是:这是由变量的类型来决定的。请看这一句:double * r =&x;因为我们在声明指针变量r时,是把它声明为一个double类型的变量。Double类型的变量在内存中就是占8个字节的,所以,虽然r指向的是x的首地址,但编译器会认为r表示的是从它指向的那个地址开始的8个字节所代表的变量。同理,因为q是一个int类型的指针变量,所以编译器会认为q表示的是从它指向的那个地址开始的4个字节所代

5、表的变量。接下来:为什么p、q、r中只存放了1个字节的地址,但却都占了4个字节呢?这是因为第1个字节的地址只是一个编号,指针变量是存储那个编号的。为了存储那个编号,需要动用4个字节的存储空间。听起来似乎有点难以理解。你明明只有1个字节,为什么要用4个字节的空间去存储?这样不是浪费了3个字节吗?举一个形象的例子:有一个小区,有100幢房子,每幢房子的大小都是100平米。每一幢房子当然都有一个编号。第1幢房子的编号是1,第100幢房子的编号是100。所以,房子的大小和它的编号的大小并没有关系,并不是说房子越大,编号越大。同理,内存当中也有很多的编号,代表着不同的地址。越往后的地址编号越大。有的单元

6、当中可能只存储一个字节,但因为这个单元的位置比较靠后,所以编号当然就大了。可是,为什么是4个字节呢?CPU内存.共32根地址总线在32位的计算机中,CPU是以32根地址总线来控制与内存的数据交换的。1根地址总线可以表示21=2种状态(1个0和1个1),2根地址总线可以表示22=4种状态,3根地址总线可以表示23=8种状态.32根地址总线总共可以表示232种状态,也就是说,它能够确定232个单元,或者说它有232个编号。因此,从第1个编号一直到最后一个编号,每一个编号都需要用32根线来表示,只不过每一个编号都需要用32根线的不同状态来表示。比如编号为0的单元其实是表示为00000.000000,共32个0,编号为1的单元其实是表示为00000.000001,共31个0和1个1。最后一个编号其实就是表示为11111.11111,共32个1。所以,从第1个字节一直到最后一个字节都需要用32位来表示。而一个字节是8位,即每个单元要用32/8=4个字节来表示。指针变量是保存一个变量地址的变量,它里面保存的是一个特殊的东西:地址,即内存单元。一个内存单元要用32个状态来表示,(32个0和1),一个0或1占用1个位,8个位是一个字节,所以当然要占用32/8=4个字节的空间。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁