[理学]C语言第7章.ppt_第1页
[理学]C语言第7章.ppt_第2页
[理学]C语言第7章.ppt_第3页
[理学]C语言第7章.ppt_第4页
[理学]C语言第7章.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

第7章 指针 7.1指针的基本概念 7.2指针的运算 7.3数组的指针和指向数组的指针变量 7.4指针与字符串 7.5函数的指针和指向函数的指针变量 7.6指针型函数 7.7指针数组和指向指针的指针 7.1指针的基本概念 7.1.1地址与指针 3 知识回顾计算机的主要工作流程 10101011 01011011 11110111 00111011 11000101 10001111 CPU(中央处理器) 4 内存的组织结构 内部存储器,是由存储单元组成的。它的特点是 存储单元是线性连续的。存储单元的最小单位是 字节。 5 如何找到要存储的数据? 为了访问内存中的某个存储单元,我们为每一个 内存的基本存储单元编号,通过这个编号就可以 访问该单元所存放的数据内容。这种编号称为内 存地址。 6 变量与地址的关系 系统给变量分配内存单元,变量在内存中可能会 占用几个连续的字节,开始字节的内存单元的地 址,就是变量的地址。 2007 7 指针:一个变量的地址称为该变量的指针。 指针变量:若一个变量专用于存放另一个变量的地 址(指针),则该变量称为指针变量。 8 . 2000 2004 2006 2005 整型变量i 5 变量i_pointer 2001 2002 2003 2000 指针 指针变量 变量的内容 变量的地址 指针变量 变量 变量地址(指针) 变量值 指向 地址存入 指针变量 9 u 直接访问与间接访问 直接访问:按变量直接存取变量值 间接访问:通过存放变量地址的变量去访问变 量 例 i=3; -直接访问 指针变量 . 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 2000 3 例 *i_pointer=5; -间接访问 5 7.1.2指针变量的定义 *表示指向,若p指向i,p中存放i的地址,*p表示p 指向的变量 . 3 i *pp 1.指针变量的定义 类型名 *指针变量名 其中:*不能省; 类型名为指针变量指向变量的类型. 例: int i, *ip; char ch, *cp; float f, *fp; 例: int i,*ip; ip= char ch, *cp; cp= float f, *fp; fp= 注:一个指针变量只能指向同一个类型的 变量,必须定义其类型. 指针变量只能存放地址. ipi *ip cpch *cp fpf *fp 2000 3000 4000 注意: u指针变量只能指向定义时所规定类型的变量。这个 规定的类型称为该指针变量的“基类型”。 u定义指针变量后,并未确定该变量指向何处。也就 是说该变量的值是不确定的。在引用指针变量前必 须首先让它指向一个变量,这一点非常重要。 p永远清楚每个指针变量指向了哪里? p永远清楚每个指针变量所指向变量中存储的内容是 什么? p永远不要使用未赋值的指针变量。 7.1.3指针变量的引用 *: 指针运算符(间接访问运算符、指向运算符). int *p1,*p2; a=100; b=10; p1= p2= printf(“%d %d”,a,b); printf(“%d %d”,*p1,*p2); 对“ p= p= printf(“%d “,*p+); printf(“%d “,(*p)+); printf(“%d “,* + p); printf(“%d “, + (*p); 2.指针变量的初始化 初始化的一般形式为: 类型名 *指针变量名=初始地址值; 例如: int a,b; int *p1= 3.指针变量的引用 #include int main(void ) int a=100,b=10; int *p1,*p2; p1=p2= printf(“%x,%xn“,p1,p2); printf(“%d,%dn“,a,b); printf(“%d,%dn“,*p1,*p2); return 0; 例:输入a和b两个整数,按先大后小的顺序输 出. main( ) int *p1,*p2,*p,a,b; scanf(“%d%d”, p1= p2= if(a ,=q;p-) scanf(“%d“,p) q=a+9; p=a0; s=0; while(pbj+1) t=bj; bj=bj+1;bj+1=t; void sort(int b10, int n) void sort(int *b, int n) 7.3.4 多维数组的指针 1多维数组的地址及其表示: int a34; a0 a1 a2 a0 a0 a0 a0 a1 a1 a1 a1 a2 a2 a2 a2 a a printf(F,a,*a); printf(F,a0,*(a+0); printf(F, printf(F,a1,a+1); printf(F, printf(F,a2,*(a+2); printf(F, printf(F,a10,*(*(a+1)+0); 若 a00的地址为158,则以上程序输出结果: 2指向多维数组的指针变量 指向数组元素的指针变量 例: main( ) int a34=1,2,3,4,5,6,7,8,9,10,11,12; int *p; for( ;p #define N 3 #define M 4 void main() int aNM; int i,j,max,col,row; int *p; /*定义指向元素的指针*/ p=*a; /*p指向二维数组0行0列的元素*/ for(i=0;i #define N 3 #define M 4 void main() int aNM,int i,j,max,col,row,int (*p)M; p=a; for(i=0;iy) z=x; else z=y; return z; main( ) int a,b,c,(*p)( ); scanf(“%d %d”, p=max; c=(*p)(a,b); printf(“max=%d”,c); 说明: 将函数名赋给指针变量不加括号; 在用指向函数的指针调用函数时仍需用实参代 替形参; 函数调用可以通过函数名调用,也可以通过函数 指针调用; 指向函数的指针变量,可指向同类型的不同函数 ; 函数指针变量:p+n,p+,p-,p-n无意义. 例:main() int (*p)( ); p=print1; (*p)(123); p=print2; (*p)(456); print1(int x) printf(“%dn”,x); print2( int y) printf(“%dn”,y); 例:写一函数,输入一个十六进制数,输出相应的十 进制数. main( ) char a81; int c, (*p)( ); int change(char *s); gets(a); p=change; c=(*p)(a ); printf(“%d “,c); change(char *s) int sum=0; while( *s) if(*s=a for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; if(strcmp(*namek,*namej)0) k=j; if(*namek *namej) k=j; void print(char *name,int n) int i; for(i=0;i1) +argv; printf(“%sn”,*argv); argc-; 7.7.4 指向指针的指针 定义:数据类型 *指针变量名 例: int *p; 表示p指向另一个变量,而这另一 个变量中存放的是一个整型变量的地址. int i,*q,*p; q= p= . iqp 10 *q *p *p name0 name1 name2 name3 Pasal Basic Word Excel p,name 【例7.25】输出若干个字符串(用指

温馨提示

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

评论

0/150

提交评论