c语言的重要知识点

c语言的重要知识点

ID:34123113

大小:1.13 MB

页数:37页

时间:2019-03-03

c语言的重要知识点_第1页
c语言的重要知识点_第2页
c语言的重要知识点_第3页
c语言的重要知识点_第4页
c语言的重要知识点_第5页
资源描述:

《c语言的重要知识点》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、c语言的几个重要知识点目录:1.内存结构2.指针3.字符串处理4.裢表5.复习大纲中的一些知识点理解 1、 内存结构这是核心中的核心,请仔细看完,充分理解,否则请不要看下一节内容。每个程序一启动都有一个大小为4GB的内存,这个内存叫虚拟内存,是概念上的,真正能用到的,只是很小一部分,一般也就是在几百K到几百M。我们PC中内存,我们称之为物理内存,也就是256M,512M等,虚拟内存和物理内存的如何转换是由操作系统完成的,我们不需要管它。我们只需要管好我们自己程序的那4GB内存就可以了。要管理4GB的虚拟内存,就必须给每个字节分配一个号码,以便程序与访问到其中任何一个字节。这个号码是从0开始顺

2、序递增的,针对于这个号码我们就称之为地址,从0x00000000-0xFFFFFFFF,这样,我们理论上就可以访问其中内存中任何一个字节了。但有一点请注意,系统并不让我们全部都可以用。其中后面2GB的内容是留给系统用的,用户是不可以访问的,而且在前面的2GB也有部分区段不能访问,比如0x00000000就不能访问。具体是哪些区段,不必关心。注意:类似于0x12345678或12345678H是10进制数305419896的16进制表示法,他们是一回事,显示16进制是为了方便显示及计算机计算。程序都是用来做一些具体的事情,不管做什么事,结构都是很相似。程序启动,就有4GB的虚拟内存,通过CPU

3、的计算,改变内存的内容,最后再复制内存的内容输出,输出的目的地可以是:屏幕、文件、磁盘等外存、端口、网络等。如何输出呢,最后全部都是调用系统的API,由操作系统完成。(这段话,请仔细体会,并牢牢记住)所以我们的核心问题就是:如何控制内存,让内存里的值,变成我们想要的结果。注意:这里的控制,指读取或写入某段内存的内容。 在虚拟内存中,我们一般将其分为4个区域:栈(stack)堆(heap)静态区域(static)数据区域(data)注意:不同的资料可能到具体的分法,有所不同,但大体上就是这样,我也是这样理解的。如下图:有兴趣的话,可以参考《Windows核心编程》第三版,里面有详细的论述。  

4、       栈        任何除静态外的变量,数组等。都是被分配到栈中的。这些变量类似于:       intx;       charc;       chars[10];       整个程序中,栈的区域是一个连续的区域,其大小在VC6.0中,是1M。这个栈的特点有点类似于我们以前学过的数据结构课程中的堆栈,都是后进先出。如何理解呢?看下面的程序:#include voidExecuteOtherCode(){/*...*/} voidTestStack1(){inta=1;intb=2;ExecuteOtherCode();} voidTestStack2(){

5、intc=3;intd=4;ExecuteOtherCode();} voidmain(){TestStack1();TestStack2();}栈的处理在VC6中是从高地址到低地址。执行该程序,运行函数到TestStack1,其中定义一个变量a,此时a就是在栈中分配一段大小为sizeof(int)的内存空间。比如a的地址&a的值就为0x0012ff28,由于a是int型的数据,其占用内存的大小为4B(其详细介绍参见稍后的注意)。所以b地址为0x0012ff24,这两个内存的分配过程我们称之为“入栈”。见下图:TestStack1结束后,系统则先收回b的空间,再收加a空间,这个过程我们叫“出

6、栈”。即0x0012ff28到0x0012ff28-2*4这段空间的内容不再有用了,即使其值还没有变化。接着再运行到TestStack2函数,也定义了两个int变量c,d,同样进行入栈操作,这样c,d很“可能”就占用了原来a,b的空间,见下图:这里用到“可能”两个字,是因为实际栈中存放着不仅仅是这些变量,包括函数的指针等也是存放在栈中,这样就会造成两个类似函数中的变量所占据的内存空间不一样。 注意:计算占用内存空间的大小,可以用sizeof(x)表示,其中x可以是变量,指针,数组,以及各种类型名等,其返回值为整形数值。每一种类型占用多大空间,这个要特别注意,在我们平常的32位普通PC机中,常

7、见的有:char        1Bshort       2Bint           4Blong        4Bfloat        4Bdouble     8B任何类型的指针均为4B,它正好能指向全部4G的虚拟内存,2的32次方为4G。数组:int arr[10];表示10个连续的int类型的内存区域。则sizeof(arr)的值为10*sizeof(int),就是40B这些内置的int等

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

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

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