第6章指针ppt课件_第1页
第6章指针ppt课件_第2页
第6章指针ppt课件_第3页
第6章指针ppt课件_第4页
第6章指针ppt课件_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、第6章 指 针 内容提要n本章主要引见指针的概念n如何用指针来访问变量、数组,如何用指针来处置字符串n如何用指针来进展动态内存分配。地址、指针和指针变量的概念 n1. 地址的概念地址的概念n1在计算机中,内存是一个延续编号或编在计算机中,内存是一个延续编号或编址的空间。也就是说,每一个存储单元在微址的空间。也就是说,每一个存储单元在微型计算机中通常是一个字节都有一个固定的型计算机中通常是一个字节都有一个固定的编号,就像门牌号码一样,这个编号称为地址。编号,就像门牌号码一样,这个编号称为地址。n2变量代表了内存中的一个位置,变量代表了内存中的一个位置,1个变量个变量要占用要占用1个或几个存储单元

2、,例如,个或几个存储单元,例如,int型变量型变量要占要占2字节,字节,float型的变量要占型的变量要占4字节等,我字节等,我们把变量所占用的存储单元首字节的地址作为们把变量所占用的存储单元首字节的地址作为变量的地址。变量的地址。 地址的运算n有关地址的运算有两个:取地址运算和访问地址运算。n1取地址运算符&用来获得变量或数组元素的地址,它的运用格式为n &vn其中,v是变量或数组元素。这种运算已在scanf()中大量运用过,这里只对&运算符作两点简要阐明。n2*和是两个等价的访问地址运算符,它们都用来访问指定地址中的数据。指针的定义和用指针访问变量 n1. 指针的定

3、义指针的定义n定义指针的普通方式为:定义指针的普通方式为:n 存储类型存储类型 数据类型数据类型 *指针指针1,*指指针针2,.n这里这里*只是一个阐明符,它既不是乘法符只是一个阐明符,它既不是乘法符号,也不是访问地址符号号,也不是访问地址符号 指针访问变量的方法、空指针和void型指针n要用指针访问变量,先要将指针指向变量,然后才干访问变量。n没有指向某一数据对象的指针称为空指针,未指定指向特定数据类型对象的指针可以定义为void型指针。 指针的运算 n指针的运算就是地址的运算。由于这一特点,指针运算不同于普通变量,它只允许有限的几种运算。除了可对指针赋值外,指针的运算还包括挪动指针、两个指

4、针相减、指针与指针或指针与地址之间进展比较等。 n1. 挪动指针n2. 两个同类型指针相减n3. 指针的比较用指针访问一维数组 n1. 使指针指向一维数组使指针指向一维数组n要用指针访问一维数组,首先要定义指要用指针访问一维数组,首先要定义指向一维数组的指针,可以经过初始化或向一维数组的指针,可以经过初始化或赋值的方式将一维数组的首地址即数赋值的方式将一维数组的首地址即数组名或第一个元素的地址保管在数组组名或第一个元素的地址保管在数组指针中。例如,定义指针中。例如,定义int a5,*p=a; 或或int a5,*p=&a0;后,指针后,指针p就与数就与数组组a建立了建立了“指向的关系

5、。指向的关系。n2. 用指针访问一维数组用指针访问一维数组n由于数组占用的是一片延续的存储单元,由于数组占用的是一片延续的存储单元,一旦定义了指向数组的指针,就可以经一旦定义了指向数组的指针,就可以经过挪动指针来访问数组的各个元素。过挪动指针来访问数组的各个元素。 用指针访问二维数组 n假设定义了指向二维数组的指针,也就可以用指针来访问二维数组的各个元素。n与一维数组不同的是一维数组的逻辑构造和存储构造是一致的,都是占用线性空间,而二维数组的逻辑构造和存储构造是不同的,逻辑构造是二维空间,存储构造是线性空间。 用指针处置字符串n在C言语中,字符串只能经过字符型数组来存储和处置。n可以经过初始化

6、的方法将字符串作为一个整体存放到字符型数组中,也可以经过赋值的方法将字符串中的字符逐个存放到字符型数组中,但是不能将字符串整体赋值给字符型数组。n假设定义了一个指向字符型数组的指针,那么在处置字符串的时候,既可以经过改动下标的方式,也可以经过改动指针“指向的方法逐个访问字符串中的字符。 二级指针 n1. 一级指针、二级指针和多级指针的概一级指针、二级指针和多级指针的概念念n前面引见的指针都是一级指针。一级指前面引见的指针都是一级指针。一级指针是直接指向数据对象的指针,即其中针是直接指向数据对象的指针,即其中存放的是数据对象,如变量或数组元素存放的是数据对象,如变量或数组元素的地址。的地址。 用

7、指针进展内存动态分配n1. 内存动态分配的含义内存动态分配的含义n2. 动态内存分配的步骤动态内存分配的步骤n3. 内存动态分配函数内存动态分配函数本章总结n本章应重点掌握地址、指针和指针变量的概念,用指针访问变量、一维数组和二维数组的方法,用指针处置字符串的方法,以及多级指针和动态内存分配的概念。n难点是指针的运算,访问地址运算符*和的等价关系,行指针和指针数组的运用。 本章习题n一、选择题n1. 设有以下语句,那么_不是对a数组元素的正确援用,其中0i10。n int a10=0,1,2,3,4,5,6,7,8,9,*p=a;nA. apa B. *(&ai) C. pi D. *

8、(*(a+i)n2. 在程序:n main()n int a10=1,2,3,4,5,6,7,8,9,0,*p;n p=a;n printf(%xn,p);n printf(%xn,p+9);n n中有两个printf(),假设第一个printf()输出的是194,那么第二个printf()输出是_。nA. 203 B. 212 C. 1a4 D. 1a6本章习题n3. 有如下程序段:nint *p,a,b=1;np=&a; *p=10; a=*p+b;n执行该程序段后,a的值是_。nA. 12 B. 11 C. 10 D. 编译出错n4. 假设有阐明:int i,j=2,*p=&am

9、p;i;,那么能完成i=j赋值功能的语句是_。nA. i=*p; B. *p=*&j; C. i=&j; D. i=*p;n5. 假设有以下定义和语句:nint a=1,2,3,4,5,6,7,8,9,10,*p=a;n那么值为3的表达式是_。nA. p+=2,*(p+) B. p+=2,*+p C. p+=3,*p+ D. p+=2,+*p本章习题n6. 设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,那么以下不能正确执行的语句是_。nA. k=*p1+*p2; B. p2=k; C. p1=p2; D. k=*p1*(*p2);n7. 设有如下定义:n

10、int a=6,7,8,9,10;nint *ptr;n那么以下程序段的输出结果为_。nptr=a;n*(ptr+2)+=2;nprintf(%d,%dn,*ptr,*(ptr+2);nA. 8,10 B. 6,8 C. 7,9 D. 6,10本章习题n8. 假设已定义:nint a=0,1,2,3,4,5,6,7,8,9,*p=a,i;n其中0i9,那么对a数组元素不正确的援用是_。nA. apa B. *(&ai) C. pi D. a10n9. 以下程序输出数组中的最大值,由s指针指向该元素,那么在if语句中的判别表达式应该是 。nmain()n int a10=6,7,2,9,

11、1,10,5,8,4,3,*p,*s;n for (p=a,s=a;p-as B. *p*s C. apas D. paps本章习题n二、填空题n1. 以下程序段的输出结果是_。nint *p,*q,k=5,j=6;nq=&k; p=q; q=&j;nprintf(%d,*p);n2. 下面程序的运转结果是_。 nmain()n int a,b,k=4,m=6,*p1=&k,*p2=&m;na=p1=&m;nb=(*p1)/(*p2)+7;nprintf(a=%d,a);nprintf(b=%dn,b);n本章习题n3. 假设有以下定义和语句,那么使指针指向值为49的数组元素的表达式是_。nint a10=19,23,44,17,37,28,49,36,*p;np=a;n4. 以下程序的输出结果是_。nmain()n int a=30,25,20,15,10,5,*p=a;n p+;nprintf(%dn,*(p+3);n n5. 以下程序的输出是_。nmain()n int a10=19,23,44,17,37,28,49,36,*p;n p=a;n printf(%dn,(p+=3)3);n 本章习题n三、编程题n1. 编一个程序,用指针操作将一个一维数组中的n个整数作以下处置:顺序将前面各数

温馨提示

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

评论

0/150

提交评论