c语言进阶-第四讲存储器与指针

c语言进阶-第四讲存储器与指针

ID:15771000

大小:95.29 KB

页数:17页

时间:2018-08-05

c语言进阶-第四讲存储器与指针_第1页
c语言进阶-第四讲存储器与指针_第2页
c语言进阶-第四讲存储器与指针_第3页
c语言进阶-第四讲存储器与指针_第4页
c语言进阶-第四讲存储器与指针_第5页
资源描述:

《c语言进阶-第四讲存储器与指针》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第四讲存储器与指针(Memory&Pointer)凌明trio@seu.edu.cn东南大学国家专用集成电路系统工程技术研究中心www.cnasic.com目录存储器,还是存储器!内存陷阱!动态内存分配算法动态内存分配代码讲解www.cnasic.com12.1指针的基本概念2.1.1指针是什么?指针是一个变量,它的值是另外一个变量的地址。例1指针变量int*p变量inta0x00C70x00C7上面例中的两个0x00C7有什么区别?2.1.2指针的类型指针所存储的那个变量类型,就称为指针的类型。例2有

2、三个不同类型的指针:intI[2],*pI=&I[0];右边的三个运算有何不同?pI++;charC[2],*pC=&C[0];pC++;floatF[2],*pF=&F[0];pF++;www.cnasic.com2.1.3指针的三个要素1.指针指向的地址(指针的内容);2.指针指向的地址上的内容;3.指针本身的地址。例3:intA,*pA,**ppA;pA=&A;ppA=&pA;在复杂的指针都可以通过下表来分析:&ppAppA*ppA**ppA&pApA*pA&AAwww.cnasic.com2第二

3、章指针2.1.4指针的大小(指针变量占用的内存空间)与所用的CPU寻址空间大小和类型有关,而与指针类型无关。8位CPU的指针长度为1~2个字节(51单片机的情况较为复杂,是1~3个字节);16位CPU的指针长度为2个字节(如MSP430);32位CPU的指针长度为4个字节(如Intel80386)。上面所述是通常情况,并不是全部符合。2.1.5指针的初始化变量在没有赋值之前,其值不定的。对于指针变量,可以表述为:指向不明。程序访问了一个没p的内存是随机的程序随即访问内存有初始化的指针:一个数,比如:地址

4、:int*p;0x3FF0073D0x3FF0073D一个指向不明的指针,是非常危险的!!!0x3FF0073D是哪里的内存?说不定正好是Windows老大要用的内存,你竟敢访问!Windows一生气,蓝屏。因此,指针在使用前一定要初始化;在使用前一定要确定指针是非空的!!!www.cnasic.com2.2数组与指针对于数组的两个概念:1.C语言中只有一维数组,数组的大小必须在编译时作为一个常数确定下来。数组的元素可以是任何类型,甚至是数组,由此可以方便地得到多维数组;2.数组的任何操作,即使采用数组

5、下标进行的运算都等于对应的指针运算。可以用指针行为替代数组下标的运算。例4:inta[4],*p;p=a;//等价于p=&a[0];*(a+2)=0;//等价于a[2]=0;p[2]=0;//等价于a[2]=0;www.cnasic.com3第二章指针但数组不同于指针:数组名a是指向数组起始位置的“常量”。因此,不能对数组名进行赋值操作。例5:inta[4],*p;p=a;//正确a=p;//错误p++;//正确a++;//错误www.cnasic.com第二章指针2.3空指针与通用指针(1).空指针是

6、个特殊指针值,也是唯一对任何指针类型都合法的指针值。一个指针变量具有空指针值,表示它当时没指向有意义的东西,处于闲置状态。空指针值用0表示,这个值绝不会是任何程序对象的地址。给一个指针赋值0就表示要它不指向任何有意义的东西。为了提高程序的可读性,标准库定义了一个与0等价的符号常量NULL,程序里可以写:p=NULL;//注意不要与空字符NUL混淆,NUL等价于‘’或者:p=0;注意:在编程时,应该将处于闲置的指针赋为空指针;在调用指针前一定要判断是否为空指针,只有在非空情况下才能调用。www.cna

7、sic.com4第二章指针(2).通用指针通用指针可以指向任何类型的变量。通用指针的类型用(void*)表示,因此也称为void指针。下面的第三行定义了两个通用指针:intn,*p;double*q;void*gp1,*gp2;可以直接把任何变量的地址赋给通用指针。例如,有了上面定义,下面赋值是合法的:gp1=(void*)&n;可以把通用指针的值赋给普通的指针。如果被赋值指针与通用指针所指变量的类型不符,需要写强制转换:p=(int*)gp1;www.cnasic.com2.4函数指针2.4.1函数指

8、针的定义函数指针即指向函数地址的指针。利用该指针可以知道函数在内存中的位置。因此也可以利用函数指针调用函数。函数指针的定义方法:<类型>(*<函数指针名>)(......)例如:int(*func)(void)这里,func就是一个函数指针。注意:int*func(void)和int(*func)(void)的区别int*func(void);//这是返回一个整型指针的函数int(*func)(void);//这是一个函数指针www.cna

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

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

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