资源描述:
《研究式学习——C语言程序设计(第二版) 方娇莉 李向阳_ 7第七章指针》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、指针第七章C程序设计
2、第七章内存地址及数据的存取方式指针的定义及运算指向数组的指针指针操作字符串语法练习和编程练习本讲主要内容C程序设计
3、第七章计算机的内存储器就象一个巨大的一维数组,每个数组元素就是一个存储单元类似每个数组元素的下标,每个内存单元都有一个编号,称为该单元的地址注意区分内存单元的地址与内存单元的值0000:00000000:0001……4000:10004000:10014000:10024000:1003……A000:C300A000:C301……FFFF:FFFF内存空间线性排列586A内存地址C程序设计
4、第七章在运行一个
5、程序时,程序及其数据(程序、函数、变量、常量、数组等)都要放在内存储器中编译程序根据对象的数据类型,在内存中为其分配一个或多个连续的存储单元。在编写程序时,通常是通过名字来使用一个变量或调用某个函数,而变量和函数的名字与其实际的存储地址之间的变换由编译程序自动完成,编译程序按变量名查找其地址,然后对该地址中的内容进行读写操作存取数据的方法C程序设计
6、第七章单元地址变量名变量类型占用单元长度规定运算操作值的存放形式空闲空间操作系统占用区0000:0000……3CFF:0000……8F10:0000……A100:0000……C100:2BFFFF
7、FF:FFFF静态区(全局变量、静态局部变量)程序区(函数及其常量代码)应用程序空间动态区(局部变量、形参变量)临时占用空间内存分配方式C程序设计
8、第七章直接访问:变量名代表着该变量已分到的地址,按变量地址存取变量值的方式称为直接访问。间接访问:这种方式好比我们要找到宝藏,必须先找到埋宝藏的地址,才能根据地址找到宝藏20002000200230102006变量i变量j变量ip36.550例如:若变量ip保存着变量i的地址,通过ip存取i的值就是间接访问。要使用间接访问运算符*变量的访问形式C程序设计
9、第七章提出问题问题的提出:从键盘输入两个整
10、数放到变量a、b中,编写子函数交换两个变量。基本算法:该题要求通过子函数的调用实现向主调函数返回两个结果值的运算用普通变量的方法来编程序swap(p,q)intp,q;{inttemp;temp=p;p=q;q=temp;return(……)}main(){inta,b;scanf(“%d,%d”,&a,&b);swap(a,b);……}程序设计到这里就无法进行下去了,因为变量a、b作实参只是将值单向传递给形参p、q,虽然在swap函数中交换了p、q的值,但不会交换a、b的值。通过return语句只能返回一个值C程序设计
11、第七章解决该问题的办
12、法有两个:将变量定义为全局变量,使其携带结果值返回。但全局变量从定义处开始在整个程序执行过程中都占用存储空间,直到程序结束。既浪费空间又不利于程序的模块化结构设计,不提倡。使用指针变量作为函数的参数。被调函数不能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。运用指针变量作参数,就能使被调函数和主函数在同一变量上操作,从而得到多个返回值。解决问题C程序设计
13、第七章swap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}main(){inta,b;int*max,*min;scanf(“%d%d”,
14、&a,&b);max=&a;min=&b;swap(max,min);printf(“%d%d”,a,b);}结果:1881解决示例:用指针变量作参数max&aa1min&bb8主函数中参数传递min&bb8p2&bmax&aa1p1&a通过p1和p2的操作改变变量a和b的值C程序设计
15、第七章定义指针变量的语法格式为:类型说明符*指针变量名1,*指针变量名2,…;其中:*表示变量为指针类型;“类型说明符”表示该指针变量所能指向的变量类型。指针变量可以在定义的时候就进行初始化。例如:inta,*p=&a;注意:任何变量都有三个要素:变量名、
16、变量的值和变量类型,指针变量的类型是它所指向的变量的类型,指针变量只能指向同一个类型的变量指针的定义C程序设计
17、第七章取地址运算符&“&”是单目运算符,作用是取得变量的地址,常用于给指针变量赋值。例如有以下定义:floatf1=2.5,f2[]={1.0,2.0,3.0};float*fp1=&f1,*fp2=f2;以上定义建立了指向变量f1的指针变量fp1,指向f2数组首元素的指针变量fp2(相当于fp2=&f2[0])能把一个数组名f2赋给一个指针变量吗?变量的地址、数组的地址、函数的地址?指针的运算C程序设计
18、第七章间接访问运算符*“*
19、”是单目运算符,用于得到指针所指向的变量值,与“&”互为逆运算,同时出现时可抵消例如:floatf1=2.5,*fp1=&f1,a;a=*fp1;其中:变量f1的指