




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C/C+程序设计,第十章指针,第十章指针,1.指针的基本概念2.指针变量和指针运算符3.指针和函数参数4.指针与数组5.指针与函数6.本章小结,1指针的基本概念,变量是存放在内存上的,内存的每一个字节成为一个单元,每个单元有一个编号,这个编号就是地址,内存是按字节排列的连续空间。定义变量:intk;编译系统根据类型为k分配内存输入变量的值:scanf(“%d”,间接访问,C提供了另一种方式,将变量k的地址存放在另一个变量处(假定为pk),通过访问pk,就可以间接地访问变量k,这种方式称为间接访问。变量intk;变量pk中存放k在内存中的地址。intk=100int*pk=变量pk是一个指针变量,指向变量k,存放k的地址,因此指针就是地址。,举例分析,比较两个程序,main()inta,b,c;a=5;b=10;c=a+b;printf(“%d,%d,%d”,a,b,c);,main()inta,b,c,*pc;a=5;b=10;pc=,指针可以指向所有类型的数据,指针指向变量-变量的指针(存变量的地址)。指针指向数组-数组的指针(存数组的起始地址)。指针指向函数-函数型指针(存放函数的入口地址)。指针指向指针-指针型指针(存放某指针的地址)。由指针组成的数组-指针数组。,2指针变量和指针运算符,一、指针变量的定义1.格式:类型*标识符;其中:指针的类型是指针所指变量的类型。*为指针说明符,说明后面的标识符为指针变量(也叫间接访问符)。2.*和pk=完全等价。,区别:定义指针*pk(说明语句)引用指针*pk(执行语句),例子,main()inta,b,c;int*p;/(指针说明)a=100;b=200;p=,main()floata,b,c;float*p;a=100.0,b=200.0;p=,*与int*pk=所以:*(则机器自动设置a,b,c的存储区域,每个整数四个字节。2.当a=100,b=200时,则分别存在a,b的空间内。3.为便于了解存储区的位置,用则*(p+7)的值为2.若定义inta4=0,1,3,5,*p;p=,3指针做函数参数,1.指针变量既可以作为函数的形参,也可以作函数的实参。指针变量作实参时,与普通变量一样,是“值传递”,即将指针变量的值传递给被调用函数的形参,对应的形参必须是一个指针变量。2.当指针变量作函数的参数时,被调用的函数不能改变实参指针变量的值,但可以改变实参指针变量所指向的变量的值。,交换,voidmain()inta,b;printf(“Entertwonumbers:”);scanf(“%d,%d”,举例,voidchange(intx,int*pm)x=10;*pm=10;voidmain()intn=200,m=200,*p1;p1=,4指针与数组,一个指针,指向一个数组数组名就是数组的起始地址1、用指针访问数组元素inta10,*pa;pa=可以移动指针使其指向数组中后面的元素向后移动i个元素pa+i指针指向元素ai。,访问数组元素,pa+i=2.字符指针的赋值:charc;pc=,4.字符数组与字符指针的区别:(1)字符数组可以写成:charc=“book”;但不能写成:charc;c=“book”;字符指针可以写成:char*pc=“book”;也可以写成:char*pc;pc=“book”;(2)当用字符串常量初始化时:字符数组获得了串中所有的字符(内容)。字符指针获得了串首的地址(与串内字符无关)。,5.字符指针的应用举例,1、编写程序完成字符串的拷贝。2、应用指针把一个字符串倒序存放,并输出。,10.4.2指针数组,一、指针数组的定义格式:类型*标识符长度;如:int*pa3;二、指针数组的初始化staticinta33=1,2,3,4,5,6,7,8,9;int*pa3=a0,a1,a2;指针数组*pa3相当于有三个指针,pa0,pa1,pa2,初始化的结果:,指针数组与二维数组是等价的,通过指针数组可以引用二维数组中的元素。对任意行i,可以有:pai=,三、指针数组的应用,1.用指针数组引用二维数组中的元素,voidmain()inti,j;staticinta33=1,2,3,4,5,6,7,8,9;int*pa3=a0,a1,a2;for(i=0;i3;i+)for(j=0;j3;j+)printf(“%d,%d,%dn”,aij,*(*(a+i)+j),*(pai+j);,2.处理二维字符数组,#defineSIZE4voidmain()inti,j,k;staticchar*strSIZE=“Program”,“Fortran”,“C”,“Basic”;char*temp;for(i=0;i0)temp=strj;strj=stri;stri=temp;for(i=0;iSIZE;i+)printf(“%sn”,stri);,3.指针数组作main函数的形参,voidmain(int参数1,char*参数2)/*参数1:命令行字符串的个数*/*参数2:各字符串在内存存放的首地址*/注意:形参值从何而来?由DOS系统执行.EXE的命令行提供。,10.4.3指针型指针,一、指针型指针的定义1.格式:类型*标识符;2.说明:类型为被指针型指针所指的指针所指的变量的类型。例:inta,*pa,*ppa;pa=*pa与a等价*ppa与pa等价*ppa与*pa与a等价,二、指针型指针的应用,1.指针型指针(二级指针)与指针数组,二维数组等价性#defineSIZE4voidmain()staticchar*p=“program”,“basic”,“fortran”,“c”;char*pp;inti;for(i=0;iSIZE;i+)pp=p+i;printf(“%sn”,*pp);指针与一维数组等价指针数组与二维数组等价二级指针与指针数组等价,2.对数据的多级间接访问inti,*pi,*ppi;pi=,5指针与函数,一、函数型指针定义了函数之后,系统为该函数分配一段存储空间,其中函数的起始地址,称为该函数的入口地址,将此地址赋给另一个变量,则该变量为一个指向函数的指针。二、函数型指针的定义格式:类型(*标识符)();说明:类型为被指针所指函数的返回值的类型,标识符为一个指针名,(不是函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃庆阳西峰数字服务就业中心招聘100人考前自测高频考点模拟试题及答案详解一套
- 2025北京邮电大学人工智能学院招聘1人(人才派遣)考前自测高频考点模拟试题及一套完整答案详解
- 公司租赁经营用房合同5篇
- 2024-2025学年河北省霸州市小学数学一年级期末通关提分题详细答案和解析
- 泗阳保安考试题库及答案
- 筑安全考试题库及答案
- 房产知识考试题库及答案
- 安全意识考试题库及答案
- 农业科技服务与项目承包合同
- 职教高考机械理论考试题及答案
- 部队军事体能训练课件
- 狗猫鼠全文赏析课件
- 国有企业外部董事个人履职报告
- 船舶拆解资金管理办法
- 2025至2030年中国包月视频点播行业市场竞争格局分析及投资方向研究报告
- 皮带机安全知识培训
- 增值税发票培训知识课件
- 2025年对酒驾醉驾问题谈心谈话记录内容范文
- 【《以儿歌为载体的小班幼儿生活自理能力提升路径分析》11000字】
- 2025年《3~6岁儿童学习与发展指南》试题(+答案)
- 零星维修工程施工组织设计方案方案
评论
0/150
提交评论