c语言程序设计第08章善于使用指针.ppt_第1页
c语言程序设计第08章善于使用指针.ppt_第2页
c语言程序设计第08章善于使用指针.ppt_第3页
c语言程序设计第08章善于使用指针.ppt_第4页
c语言程序设计第08章善于使用指针.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

Return 第8章 善于使用指针 8.1 什么是指针 8.2 指针变量 8.3 通过指针引用数组 8.4 通过指针引用字符串 Return 8.1 什么是指针 1 指针是C语言的精华(灵魂) 掌握指针的应用,可以使程序简洁、紧凑、高效。 2 指针是内存单元的地址 (1) 定义变量分配存储单元。 (2) 存储单元包含若干字节。 (3) 每个字节都有一个编号,即地址。 (4) 单元的地址是首字节的地址,即变量的地址。 (5) 地址形象化地成为“指针”,指针即地址。 (6) 变量的地址即变量的指针,指针指向该变量单元。 (7) 将变量的地址存放到一个变量中,此变量称指针变量 。 Return 8.2 指针变量 8.2.1 指针变量的定义、初始化和引用 1 定义:int a,b,*p,*q; char ch,*r; 一般式:基类型 *指针变量名; 2 定义指针变量时,可同时初始化: int a,b,*p= char ch,*r= 3 引用指针变量3种情况 (1) 给指针变量赋值: 例如:int a,b,*p,*q; p=q= 注:指针变量只能存放地址,并且必须是与指针基类型相同 类型的变量的地址,不能将一个整数赋给指针变量。 Return (2) 通过指针变量引用指针变量所指的变量 例如: int a ,b,*p,*q; p=q = *p=20;*q=*p+10; printf (“%d ,%d n”,*p,*q); printf (“%d ,%d n ”, a , b); 注意:两个运算符“ 以八进制的数的形式输出指针变量p、q的值。 Return 例8.2 (p214) 输入a,b两个整数,按先大后小顺序输出。 设计算法:使用指针,不交换两个整型变量的值,而是 交换指针变量的值。 编程序: #include void main( ) int a ,b,*p,*p1,*p2; p1=p2 = scanf (“%d %d ” ,p1 ,p2 ); if(a void swap(int *p1,int *p2) int temp; temp=*p1;*p1=*p2;*p2=temp; void main( ) int a ,b,*q1= scanf (“%d %d ” ,q1 ,q2 ); if(a void main() int i,j,t,a20,*p=a; for(i=0;i=0;p-) printf(“%4d”, *p); printf(“n”); /*分析下列方法正确否?*/ for(i=0;i=0 Return 使用指向数组元素的指针变量p时,要注意: (1) p可以指向不同的元素 如:p= sqrt(array,10); /*也可以写成sqrt(p,10); */ 定义函数中,a是形参数组名,相当是指针变量,所以将 函数首部写成:void sqrt(int *a ,int n) 是一样的。 调用函数时,把实参数组名array(指针常量)传递给a,此 时a和array指向同一个数组,因此在对形参a数组排序时, 等于直接在实参数组array上完成。直接改变了数组元素值 。 用数组名作参数可以有4种不同的形式 Return 用数组名作参数可以有4种不同的形式: 形参 实参 数组名 数组名 指针变量 数组名 数组名 指针变量 指针变量 指针变量 注意: 前面介绍过,用指针作函数的参数,可以将多个值带回到 主调函数,相当有多个返回值。 数组名是指针,因此在对形参数组进行改变时,等于直接 在实参数组上完成,相当形参数组的所有值都返回给实参 数组。 例8.9 (p228) 用指针和函数完成选择法排序。 Return 8.4 通过指针引用字符串 数组元素可以作为函数的参数,其用法与变量相同;数组 名也可以作为函数的参数,传递的是数组首元素的地址。 8.4.1 数组组元素作函数参数 数组元素可以作为调用函数时的实参,传值给形参。数组 元素不能作为函数的形参。 例如: int a10; x=max(a1,a2); /*求元素a1、a2中大的*/ int max(int x,int y) 不能写成: int max(int a1,int a2) 例7.6 (P185) Return 7.4.2 数组组名作函数参数 数组名也可以作为函数调用时的实参,传递的是数组首 元素的地址(即数组的首地址),不是将数组中的所有元 素传递给形参。此时,对应的形参应当是数组名或指针变 量(见第8章)。 例7.7 (P186) 例7.8 (P188) #include void main( ) float average(float array ); /*函数原型*/ float scroe10,aver); aver=average(score ); /*调用函数,数组名为实参 */ float average(float array ) /*数组名为形参*/ Return 例7.9 (P189)用一个函数实现选择法对10个数排序。 #include void sort(int a ,int n) /*定义函数,数组名为形参*/ int i,j,k,t; for(i=0;i int fac(int n) static int f=1 ; /*f为静态局部变量*/ f=f*n; return(f); void main() int i; for(i=1;i=5;i+) printf(“%d!=%dn”,i,fac(i); 注: 静态局部变量“f”的有效范围只限于函数fac,但是生 存 期是整个程序,即在fac函数外,它的值仍然存在。再次调用 函数时,继续在前一个值上累乘。 若静态局部变量在定义时未初始化,系统自动赋值为0。 Return 3 registc寄存器变变

温馨提示

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

评论

0/150

提交评论