《从问题到程序》ppt课件

《从问题到程序》ppt课件

ID:40018908

大小:337.50 KB

页数:108页

时间:2019-07-17

《从问题到程序》ppt课件_第1页
《从问题到程序》ppt课件_第2页
《从问题到程序》ppt课件_第3页
《从问题到程序》ppt课件_第4页
《从问题到程序》ppt课件_第5页
资源描述:

《《从问题到程序》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、从问题到程序第七章,指针程序执行中数据存于内存。在可用期间数据有确定存储位置,占据一些存储单元。内存单元的编号:地址。机器语言通过地址访问数据。高级语言用变量等作为存储单元/地址的抽象。建立变量就是安排存储。赋值时存入,用值时从中提取外部变量/静态变量有全局存在期,程序执行前安排存储位置,保持到程序结束。自动变量在函数调用时安排存储,至函数结束。再调用时重新安排存储。7.1地址与指针变量存在期就是它占据所安排存储的期间。任何变量在存在期间总有确定存储位置,有固定地址。寄存器变量可能放在寄存器,无地址。本章不考虑寄存器变量。变量存在时有地址,地址用二进制编码,因此可能成为程序处

2、理的数据。问题:地址作为数据有什么用?若程序可以处理对象地址,就可通过地址处理相关对象。对象(如变量)地址也被作为数据,地址值/指针值。以地址为值的变量称为指针变量/指针(pointer)。指针是一种访问其他对象的手段,利用这种机制能更灵活方便地实施对各种对象的操作。指针的主要操作指针赋值:将程序对象的地址存入指针变量。间接访问:通过指针访问被指对象。指针还能保存其他对象的地址。下面讨论以变量为例。指针p保存着变量x地址,也说指针p指向x。图示:在C中使用指针常能写出更简洁有效的程序。有些问题必须用指针处理。指针在大型复杂软件中使用广泛。指针使用的水平是评价人的C程序设计能力

3、的重要方面。C指针灵活/功能强。掌握有难度,易用错,应特别注意。应特别注意使用指针的常见错误,注意!指针是变量,可赋值,其指向可以改变。现在p指向x,以后可能指向y。通过p访问被指对象的语句目前访问x,后来就访问y。这种新的灵活性很有用。7.2指针变量的定义和使用指针有类型,只能保存特定类型的变量的地址指向int的指针p只能指向int变量。p所指也看作int,从p间接访问当作int。常说int指针p1等。定义指针需指明指向类型。定义指向int的指针变量:int*p,*q;指针变量可以与其他变量一起定义:int*p,n,a[10],*q,*p1,m;指针是变量,可赋值取值,有定

4、义域与存在期。应赋给类型正确的指针值,取出的值是特定类型的指针值。用(int*)表示整型指针的类型,其他类似。指针操作取地址运算符&和间接访问操作*。都是一元运算符取地址运算&写在变量描述(如变量名)前取变量地址,是对应类型的指针值,可赋给类型合适的指针。例:p=&n;q=p;p1=&a[1];多个指针可能同时指向同一变量。变量相等是值相等,两个指针变量相等说明它们指向程序里同一东西。间接运算间接运算得到被指针所指的变量,这种表达式可以像普通变量一样使用。设p指向n。间接赋值:*p=17;这里写*p相当于直接写n。另一个赋值:m=*p+*q*n;/*访问n三次*/++*p;/

5、*使变量n的值加1,变成18*/(*p)++;/*使变量n的值再加1,变成19。*/*p+=*q+n;/*变量n被赋以新值57*/q=&a[0];/*指针q指向了数组a的元素*/指针作为函数参数指针作为函数参数有特殊意义,利用这种参数可写出能修改调用时环境的函数。函数调用处的环境指在调用函数的位置能访问的变量全体。前面函数的特点:可使用调用处环境中变量的值(通过参数),但不能修改这些变量(数组参数除外)。在函数f里调用g,可将f的局部变量作为实参。但用g改变f局部变量的唯一方法是将g的返回值赋给f的局部变量。这种方法局限性太强,例如无法在一个函数调用中修改两个局部变量的值。利

6、用指针可以改变这种情况。例:定义函数swap,希望用它交换两个变量的值。因为要改变两个变量,无法通过返回值解决。下面定义不行:voidswap0(intx,inty){intt=x;x=y;y=t;}intf(…){inta=5,b=10;swap0(a,b);…/*不行*/}函数内修改形参,不会改变调用时的实参。分析:要(在一函数里)通过调用函数g修改调用处的变量(如局部变量),必须在g里掌握这个变量。用指针可以解决问题。把m的地址(也是值)通过指针参数p传给g,函数内对p间接访问就能操作m,包括对m赋值(改变m)。例,通过函数调用把变量值设置为3:voidset3(int

7、*np){*np=3;}使用实例:intmain(){intn,m;set3(&n);/*设置n和m*/set3(&m);printf("%d,%d",n,m);return0;}请回忆scanf的情况。通过参数改变调用环境的方案包括三方面:函数定义中用指针参数;函数内用间接操作实际变量;调用时以被操作变量的地址作为实参。函数swap可定义为:voidswap(int*p,int*q){intt=*p;*p=*q;*q=t;}交换变量m和n的值,调用形式是:swap(&m,&n);swap的参数类型

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

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

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