study ww c总结

study ww c总结

ID:6033112

大小:92.00 KB

页数:28页

时间:2017-12-31

study ww    c总结_第1页
study ww    c总结_第2页
study ww    c总结_第3页
study ww    c总结_第4页
study ww    c总结_第5页
资源描述:

《study ww c总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、指针,数组,类型的识别,参数可变的函数。一.指针。它的本质是地址的类型。在许多语言中根本就没有这个概念。但是它却正是C灵活,高效,在面向过程的时代所向披靡的原因所在。因为C的内存模型基本上对应了现在vonNeumann(冯·诺伊曼)计算机的机器模型,很好的达到了对机器的映射。不过有些人似乎永远也不能理解指针【注1】。注1:JoelSpolsky就是这样认为的,他认为对指针的理解是一种aptitude,不是通过训练就可以达到的http://www.joelonsoftware.com/pr.../fog0000000073.html指针可以指向值、

2、数组、函数,当然它也可以作为值使用。看下面的几个例子:int*p;//p是一个指针,指向一个整数int**p;//p是一个指针,它指向第二个指针,然后指向一个整数int(*pa)[3];//pa是一个指针,指向一个拥有3个整数的数组int(*pf)();//pf是一个指向函数的指针,这个函数返回一个整数后面第四节我会详细讲解标识符(identifier)类型的识别。1.指针本身的类型是什么?先看下面的例子:inta;//a的类型是什么?对,把a去掉就可以了。因此上面的4个声明语句中的指针本身的类型为:int*int**int(*)[3]int(*

3、)()它们都是复合类型,也就是类型与类型结合而成的类型。意义分别如下:pointtoint(指向一个整数的指针)pointertopointertoint(指向一个指向整数的指针的指针)pointertoarrayof3ints(指向一个拥有三个整数的数组的指针)pointertofunctionofparameterisvoidandreturnvalueisint(指向一个函数的指针,这个函数参数为空,返回值为整数)2.指针所指物的类型是什么?很简单,指针本身的类型去掉“*”号就可以了,分别如下:intint*int()[3]int()()3

4、和4有点怪,不是吗?请擦亮你的眼睛,在那个用来把“*”号包住的“()”是多余的,所以:int()[3]就是int[3](一个拥有三个整数的数组)int()()就是int()(一个函数,参数为空,返回值为整数)【注2】注2:一个小小的提醒,第二个“()”是一个运算符,名字叫函数调用运算符(functioncalloperator)。3.指针的算术运算。请再次记住:指针不是一个简单的类型,它是一个和指针所指物的类型复合的类型。因此,它的算术运算与之(指针所指物的类型)密切相关。inta[8];int*p=a;int*q=p+3;p++;指针的加减并不

5、是指针本身的二进制表示加减,要记住,指针是一个元素的地址,它每加一次,就指向下一个元素。所以:int*q=p+3;//q指向从p开始的第三个整数。p++;//p指向下一个整数。double*pd;……//某些计算之后double*pother=pd–2;//pother指向从pd倒数第二个double数。4.指针本身的大小。在一个现代典型的32位机器上【注3】,机器的内存模型大概是这样的,想象一下,内存空间就像一个连续的房间群。每一个房间的大小是一个字节(一般是二进制8位)。有些东西大小是一个字节(比如char),一个房间就把它给安置了;但有些东

6、西大小是几个字节(比如double就是8个字节,int就是4个字节,我说的是典型的32位),所以它就需要几个房间才能安置。注3:什么叫32位?就是机器CPU一次处理的数据宽度是32位,机器的寄存器容量是32位,机器的数据,内存地址总线是32位。当然还有一些细节,但大致就是这样。16位,64位,128位可以以此类推。这些房间都应该有编号(也就是地址),32位的机器内存地址空间当然也是32位,所以房间的每一个编号都用32位的二进制数来编码【注4】。请记住指针也可以作为值使用,作为值的时候,它也必须被安置在房间中(存储在内存中),那么指向一个值的指针需

7、要一个地址大小来存储,即32位,4个字节,4个房间来存储。注4:在我们平常用到的32位机器上,绝少有将32位真实内存地址空间全用完的(232=4G),即使是服务器也不例外。现代的操作系统一般会实现32位的虚拟地址空间,这样可以方便运用程序的编制。关于虚拟地址(线性地址)和真实地址的区别以及实现,可以参考《Linux源代码情景分析》的第二章存储管理,在互联网上关于这个主题的文章汗牛充栋,你也可以google一下。但请注意,在C++中指向对象成员的指针(pointertomemberdataormemberfunction)的大小不一定是4个字节。为

8、此我专门编制了一些程序,发现在我的两个编译器(VC7.1.3088和Dev-C++4.9.7.0)上,指向对象成员的指针的大小没有定值,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。