三级数据库技术-指针_第1页
三级数据库技术-指针_第2页
三级数据库技术-指针_第3页
三级数据库技术-指针_第4页
三级数据库技术-指针_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、n指针指针指针的概念指针的概念 143 3 6 7 8 15 16 A公司公司B公司公司C公司公司一排平房一排平房 叫地址叫地址 一排平房一排平房 1000 int a;float b;内存管理内存管理 1001 2002 2003 2000 2001 a的地址的地址b的地址的地址概念概念 n变量变量a a的地址记作的地址记作&a &a n指针变量指针变量专门存放另一变量的地址专门存放另一变量的地址n如果如果p是指针类型变量,而且是指针类型变量,而且p中存放了变中存放了变量量x的地址,则称的地址,则称常画成如图所示常画成如图所示形式。形式。px p指向指向x&x指针变量指针变量n指针即变量的地

2、址指针即变量的地址intint x; x;& &取地址运算符取地址运算符n指针变量:用来存放指针的指针变量:用来存放指针的变量变量intint * *p p 定义了一个指针变量,定义了一个指针变量,只能存放整型变量的地址只能存放整型变量的地址 * *表示指针类型表示指针类型p=&xp=&x;把;把x x的地址存在的地址存在p p变量中变量中y=y=* *p; p; * *p p表示表示p p指向的变量的值指向的变量的值 * *是取地址内容运算符是取地址内容运算符 注意与定义指针变量的注意与定义指针变量的* * 区别区别002002003003&X&Xp px x5 5&X&X【实例】编写程序,

3、实现以下每一步的操作。【实例】编写程序,实现以下每一步的操作。 (1)定义整型变量)定义整型变量iX。(2)定义两个整型指针类型变量)定义两个整型指针类型变量iP和和iQ。(3)使)使iP指向变量指向变量iX。(4)使)使iQ也指向变量也指向变量iX。(5)通过)通过iP给给iX存储单元赋存储单元赋10。(6)通过)通过iQ对对iX的值增加的值增加5。(7)通过)通过iX,输出,输出iX中的值。中的值。 【实例】编写程序,实现以下每一步的操作。【实例】编写程序,实现以下每一步的操作。 (1) int iX=0; (2)定义两个整型指针类型变量)定义两个整型指针类型变量iP和和iQ。(3)使)使

4、iP指向变量指向变量iX。(4)使)使iQ也指向变量也指向变量iX。(5)通过)通过iP给给iX存储单元赋存储单元赋10。(6)通过)通过iQ对对iX的值增加的值增加5。(7)通过)通过iX,输出,输出iX中的值。中的值。 iXiX【实例】编写程序,实现以下每一步的操作。【实例】编写程序,实现以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3)使)使iP指向变量指向变量iX。(4)使)使iQ也指向变量也指向变量iX。(5)通过)通过iP给给iX存储单元赋存储单元赋10。(6)通过)通过iQ对对iX的值增加的值增加5。(7)通过)通过iX,输出,输出iX中的值

5、。中的值。 int 和和 * 是整体,是整体, int * 表示整型指针表示整型指针类型类型iPiQ(1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4)使)使iQ也指向变量也指向变量iX。(5)通过)通过iP给给iX存储单元赋存储单元赋10。(6)通过)通过iQ对对iX的值增加的值增加5。(7)通过)通过iX,输出,输出iX中的值。中的值。 iXiPiQ【实例】编写程序,实现以下每一步的操作。【实例】编写程序,实现以下每一步的操作。 取地址运算符取地址运算符&iX无需知道具体地址值,无需知道具体地址值,用用“&变量名变量名”表示即表示即可可【实例】编写程

6、序,实现以下每一步的操作。【实例】编写程序,实现以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&iX; (5)通过)通过iP给给iX存储单元赋存储单元赋10。(6)通过)通过iQ对对iX的值增加的值增加5。(7)通过)通过iX,输出,输出iX中的值。中的值。 iXiPiQ&iX&iX使使iQ指向变量指向变量iX,等价于等价于 iQ=iP; 【实例】编写程序,实现以下每一步的操作。【实例】编写程序,实现以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&

7、iX; (5) *iP=10;(6)通过)通过iQ对对iX的值增加的值增加5。(7)通过)通过iX,输出,输出iX中的值。中的值。 与与iX=10; 完完全等价全等价iXiPiQ&iX&iX当当iP指向指向iX时,时,iX与与*iP代表同一个代表同一个存储单元存储单元【实例】编写程序,实现以下每一步的操作。【实例】编写程序,实现以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&iX; (5) *iP=10;(6) *iQ=*iQ+5;(7)通过)通过iX,输出,输出iX中的值。中的值。 iXiPiQ&iX&iX【实例】编写

8、程序,实现以下每一步的操作。【实例】编写程序,实现以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&iX; (5) *iP=10;(6) *iQ=*iQ+5;(7)通过)通过iX,输出,输出iX中的值。中的值。 iXiPiQ&iX&iX【实例】编写程序,实现以下每一步的操作。【实例】编写程序,实现以下每一步的操作。 (1) int iX=0; (2) int *iP,*iQ; (3) iP=&iX; (4) iQ=&iX; (5) *iP=10;(6) *iQ=*iQ+5;(7) printf(iX=%dn,iX); iX

9、iPiQ&iX&iX指针的应用实例指针的应用实例 【实例】有【实例】有A、B两种衣服,它们的单价分别两种衣服,它们的单价分别是是480元和元和350元。由于衣服过时,将元。由于衣服过时,将A衣衣服按七五折、服按七五折、B衣服按八折出售,计算两种衣服按八折出售,计算两种衣服实际单价总和与实际单价的差价。衣服实际单价总和与实际单价的差价。146return语句最多只能返回语句最多只能返回一个值,调用一个函数一个值,调用一个函数无法返回两个计算结果无法返回两个计算结果?应使用传递变量地址的方法应使用传递变量地址的方法程序代码:程序代码: #include void price(float,float

10、,float *,float *); main() float fA=480,fB=350,fS=0.0,fT=0.0; price(fA,fB,&fS,&fT); printf(fA=%.2f,fB=%.2fn,fA,fB); printf(fS=%.2f,fT=%.2fn,fS,fT); 用函数实现计算功能函数定义在调用之后注明函数原型程序代码:程序代码: void price(float fA,float fB,float *fX,float *fY) fA=fA*0.75; fB=fB*0.8; *fX=fA+fB; *fY=fA-fB; 运行结果:运行结果:fA=480.00,fB=

11、350.00fS=640.00,fT=80.00 形参形参fA的值被改变,但不会影响主函数中的的值被改变,但不会影响主函数中的fA形参形参fB的值被改变,但不会影响主函数中的的值被改变,但不会影响主函数中的fB*fX相当于主函数中的相当于主函数中的fS*fY相当于主函数中的相当于主函数中的fT程序说明:程序说明:(1)price(fA,fB,&fS,&fT); 函数调用开始函数调用开始时实参与形参之间的关系如图所示。时实参与形参之间的关系如图所示。0fS0fTfAfBfXfY调用开始时调用开始时fA480fB350被被调调函函数数主主调调函函数数480350fAfB00fSfT480350fA

12、fBfXfY调用开始时调用开始时480350被被调调函函数数主主调调函函数数程序说明:程序说明:(1)price(fA,fB,&fS,&fT); 函数调用开始函数调用开始时实参与形参之间的关系如图所示。时实参与形参之间的关系如图所示。fAfB00fSfT480350fAfBfXfY调用开始时调用开始时480350被被调调函函数数主主调调函函数数fAfB00fSfT480350fAfBfXfY调用开始时调用开始时480350被被调调函函数数主主调调函函数数程序说明:程序说明:(1)price(fA,fB,&fS,&fT); 函数调用开始函数调用开始时实参与形参之间的关系如图所示。时实参与形参之间

13、的关系如图所示。fAfBfSfT360280fAfBfXfY调用期间调用期间480350被被调调函函数数主主调调函函数数程序说明:程序说明:(1)price(fA,fB,&fS,&fT); 函数调用开始函数调用开始时实参与形参之间的关系如图所示。时实参与形参之间的关系如图所示。fAfB00fSfT480350fAfBfXfY调用开始时调用开始时480350被被调调函函数数主主调调函函数数fAfB64080fSfT360280fAfB64080fXfY调用期间调用期间480350被被调调函函数数主主调调函函数数指针与数组元素的关系指针与数组元素的关系void main()void main()

14、int int s5=10,20,30,40,50; s5=10,20,30,40,50; int int * *p,p,* *p1;p1; p=s; p=s; p1=s; p1=s; printf(“%d printf(“%d %d”, %d”,* *p,p10);p,p10); p+; p+; printf(“%d %d %d printf(“%d %d %d”,”,* *p,s1,p11);p,s1,p11); 10102020303040405050S S数组名为第一个元素的地址数组名为第一个元素的地址S Sp pp pS0S0S1S1指针作为函数参数与数组的关系指针作为函数参数与数组

15、的关系void test(intvoid test(int * *p)/p)/对函数功能进行定义,还没执行对函数功能进行定义,还没执行 * *(p+1)=(p+1)=* *p+10;p+10; void main()void main() int int s5=10,20,30,40,50; s5=10,20,30,40,50; int int * *p,p,* *p1;p1; p=s; p=s; test(p test(p);/);/执行函数执行函数 printf(“%dprintf(“%d ”,p1); ”,p1); 指针作为函数形参的精髓指针作为函数形参的精髓n不通过指针作为形参,形参和

16、实参是独立不通过指针作为形参,形参和实参是独立的的n通过指针作为形参,在函数中形参中访问通过指针作为形参,在函数中形参中访问实参的内容,把形参和实参联系起来了实参的内容,把形参和实参联系起来了n与指针有关的题型与指针有关的题型字符替换字符替换 程序程序PROG1.CPROG1.C的功能是的功能是: : 把把 s s 字符串中的所有字母改写成字符串中的所有字母改写成该字母的下一个字母该字母的下一个字母, ,字母字母z z改写成字母改写成字母a,a,字母字母Z Z改写成字改写成字母母A, A, 其它字符不做改变。其它字符不做改变。 请考生编写函数请考生编写函数chg(charchg(char *

17、*s)s)实现程序要求实现程序要求, , 最后调用最后调用函数函数readwriteDATreadwriteDAT()()把结果输出到文件把结果输出到文件out.datout.dat中。中。 例如:例如:s s 字符串中原有的内容为:字符串中原有的内容为:Mn.123ZxyMn.123Zxy,则调用,则调用该函数后,结果为:该函数后,结果为:No.123AyzNo.123Ayz。 注意注意: : 部分源程序存在文件部分源程序存在文件PROG1.CPROG1.C文件中。文件中。 请勿改动数据文件请勿改动数据文件in.datin.dat中的任何数据、主函数中的任何数据、主函数main()main(

18、)和输出数据函数和输出数据函数readwriteDATreadwriteDAT()()的内容。(的内容。(1616套)套)#include string.h#include #include stdio.h#include #include ctype.h#include #define N 81#define N 81void readwriteDATvoid readwriteDAT();();void chg(charvoid chg(char * *s)s) main( )main( ) char aN char aN; printf(Enter a string : ); gets(

19、a printf(Enter a string : ); gets(a);); printf(The original string is : ); printf(The original string is : ); puts(aputs(a);); chg(a chg(a);); printf(The printf(The string after modified : ); string after modified : ); puts (a); puts (a); readwriteDAT readwriteDAT() ;() ; void readwriteDAT() int i ;

20、 char aN ; FILE *rf, *wf ; rf = fopen(c:testin.dat, r) ; wf = fopen(c:testout.dat, w) ; for(i = 0 ; i 10 ; i+) fscanf(rf, %s, a) ; chg(a) ; fprintf(wf, %sn, a) ; fclose(rf) ; fclose(wf) ;编程点拨编程点拨a3ZAzf0a数组a调用chg()函数前s调用chg()函数期间s形参指针指向实参a数组Chg函数只需对s进行操作实现功能:对数组中的每个元素都要进行判断和操作 所以可以通过循环实现 问题:循环结束条件ssA

21、sBsasgs停止转换循环变量 swhile (*s!=0) . s+;void chg(charvoid chg(char * *s)s) char ch char ch ; ; while( while(* *s) s) 循环结束条件:当*s不为0时循环在循环体内判断如果 *s是为字母并且不为 z和Z *s=*s+1否则 如果 *s=z *s=a 如果 *s=Z *s=A if(isalpha(*s) & *s != z & *s!= Z) *s= *s+ 1 ; else if(*s= z) *s = a ; else if(*s = Z) *s = A ;s+ ; 循环要结束 s+请编

22、写函数请编写函数void countValue(int void countValue(int * *a,inta,int * *n)n),它的功能是,它的功能是: : 求出求出1 1到到10001000之内能被之内能被7 7或或1111整除但不能同时被整除但不能同时被7 7和和1111整除的所有整整除的所有整数数, ,其结果按从小到大的顺序放在数组其结果按从小到大的顺序放在数组a a中中, ,并通过形式参数并通过形式参数n n传递这些数的个数。传递这些数的个数。 注意注意: : 部分源程序存在文件部分源程序存在文件PROG1.CPROG1.C文件文件中。中。 请勿改动主函数请勿改动主函数ma

23、in()main()和输入输出数据和输入输出数据函数函数writeDATwriteDAT()()的内容。(的内容。(0303套)套)#include conio.h#include #include stdio.h#include void writeDATvoid writeDAT() ;() ;void countValue(int void countValue(int * *a, inta, int * *n)n) main( )main( ) int int aa1000, n, k ; aa1000, n, k ; countValue( aa countValue( aa, &n

24、 ) ;, &n ) ; for( k = 0 ; k n ; k+ ) for( k = 0 ; k n ; k+ ) if(k + 1) % 10 = 0) if(k + 1) % 10 = 0) printf(%5dn, aakprintf(%5dn, aak) ;) ; else printf(%5d, aak else printf(%5d, aak) ;) ; writeDAT writeDAT() ;() ; void writeDAT() int aa1000, n, k ; FILE *fp ; fp = fopen(C:WEXAM35990001out.dat, w) ;

25、countValue(aa, &n) ; for ( k = 0 ; k n ; k+ ) if(k + 1) % 10 = 0) fprintf(fp, %5dn, aak) ; else fprintf(fp, %5d, aak) ; fclose(fp) ;形参a指向实参aa数组形参n指向实参n代码void countValue(int void countValue(int * *a, inta, int * *n)n) for(i = 7 ; i = 1000 ; i+) if(i % 7) = 0 | (i % 11) = 0) & (i % 77 != 0) a(*n)+ = i

26、 ;/为什么加为什么加()int i ;形参n记录满足条件的个数 需赋初值*n = 0 ;/为什么不是为什么不是n=0;7-1000中个每个数都进行判断所以需要循环每个数被每个数被7或或11整除但整除但不能同时被不能同时被7和和11整除整除满足条件满足条件 保存该数据到保存该数据到a数组数组中,同时中,同时*n自增自增n下列程序的功能是下列程序的功能是: :把把S S字符串中的所有字字符串中的所有字符左移一个位置符左移一个位置, ,串中的第一个字符移到最串中的第一个字符移到最后后. .请编写函数请编写函数CHG(charCHG(char * *S)S)实现程序要求实现程序要求, ,最后调用函数最后调用函数READWRITEDAT()READWRITEDAT()把结果输出把结果输出到到OUT.DATOUT.DAT文件中文件中. .例如例如:S:S字符串中原有内容为字符串中原有内容为:MN.123XYZ,:MN.123XYZ,则则调用函数后调用函数后, ,结果为结果为:N.123XYZM.:N.123XYZM.请勿改动主函数请勿改动主函数main()main()和输入输出函数和输入输出函数readwriteDATreadwriteDAT()()的内容。的内容。试题程序:试题程序: #include string.h#include #include stdlib.h#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论