day8-指针参考语言第六讲_第1页
day8-指针参考语言第六讲_第2页
day8-指针参考语言第六讲_第3页
day8-指针参考语言第六讲_第4页
day8-指针参考语言第六讲_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

指【【本章要点C语言的一个重要概念,也是C语言的一个重要特色。正确灵活的以说,不掌握指针就没有掌握C语言的精华地址:内存单元的编号也叫做地址各种类型变量都有地址,通过地址(指针)或变量名变量变量:命名的内存空间,用于存放各种类型的数据变量名:变量名是给内存空间取的一个容易的名字。指针:就是内存单元的地址。指针指向一个内存单元指针变量就是存放地址的变量。但有时为了阐述方便所说指针都是指针定义的一般格式<类型><数据类型><*指针变量名>[=初始地址值)(1)extern(2)intchar、float例如: 指针变量前面的*表示其后为指针变量。指针变量的名字是p1、p2。而指针变量存放地址值,在内存中占用的空间是4指针变量一定要周赋值后才可以使用。使用未初始化或未赋值的指(否则可能导致系统的)指针运算符&例如:&a为取变量a*:例如:*p为指针变量p所指向的变量指针变量的赋值方法例如:float*f=(float注malloc()函数申请动态分配内存空间,返回空间首地址;使用这2个函数时需要头文件<stdlib.h>或<alloc.h>inti,*p;取地址运算符例如:&a为取变量a取内容运算符赋值运有以下几种形式float*f=(float*)malloc(4);inti,*p=&i;int /*把整型变量a的地址赋予整型指针变量intpb /*把a的地址赋予指针变量例如:inta[5],*p;或写为 或:int例如:char*pc;pc="或写为char*pc="int /*f为函数名指针加减任意整数运减去一个整数n。对指向其它类型变量的指针变量作加减运算是毫无意义的。运算形式:设有数组指针变量p,则有p+np-np+p,p 运算都是合法的运算作用:±n就是把指针指向的当前位置向前(减)或向后(加)移动n个元素位置。例如int /*p指向数组a,也是指向 /*p指向a[2],即p的值为两指针变量相运算形式:p、q,则有:p-运算作用:相减所得之差是两个指针所指数组元间相差的元素个数pf1=2010Hpf2=2000H则得:pf1-pf2=(2000H-2010H)/4=4指针的关系运运算条件:必须是指向同一数组的2个指针变量才能进行关系运算例如:设如果paqa都指向同一个数组则有:pa>qa、pa<qapa>=qapa<=qapa==qa说明:当pa所指元素在qa之前,则表达式“pa<qa”为真(值为当pa和qa都指向同一个元素时,表达式“pa==qa”为真(值为1少?pp9.5*++ppp9.9+*pp20pa[2],然后进行*p30++*pp21,pa[1]数组 代表数组的首地址,是一个常量数组的指针:就是指向数组元素地址的指针变量数组元素除了用下标法外也可以用指针法来数组元素。例如:intint*p;如图9.6下面的语句是等价的p=&a[0];例如int int*p;有以下四种方法数组元素*(p+k)、*(a+k)、p[k]、前两种称为指针法,后两种称为下标注意指针变量的运算设指针p=a(a为数组名p++,pa[1]。*pa[1]②*p++,相当于*p,p++③*(p++)与*(++p)④(*p)++,p⑤如果pai*(pa[ip“*”运算,再使p*(++p)a[++i],p**(--p)a[--i],先使p* 设有一个二维数组aint二维数组a,可视为三个一维数组:a[0]、a[1]、a[2];而每个一维数组又用数组名表示二维数组的行地则有:a为二维整型数组名,a=2000 就是第行的首地 。即为 代表第一行首地址。 。即为 代表第二行首地址。 。即为用数组名表示二维数组元素地a[0]、a[1]、a[2]a[2]+3等介于*(a+1)+3,即&a[1][3]a[0][1]的值可表示为:*(a[0]+1)和a[i][j]的值可表示应为:*(a[i]+j)和*(*(a+i)+j)数组元素三种形式⑴ ⑶ 指向数组元素的指针变二维数组的每个元素在内存 在地址连续 空间中如图9.7和所示。用指向数组元素的指针变量来数组p=a[0]可改为p=&a[0][0],但不能为指向由m个整数组成的一维数组的指针变m(*例如:intq,它指向包含有4注意:*q必须放在括弧内,否则就变成了定义指针数组设有如下定义inta[3][4]=int(*q)[4];则:q+0为二维数组第0a+0或*(a+0)相同;q+1为二维数组第1a+1或*(a+1)相同;q+2为二维数组第2a+2或*(a+2)*(q+i)+j为第ij*(a+i)+j*(*(q+i)+j)ij*(*(a+i)+j)a[i][j]用指向有mvoid{inta[3][4]=int(*q)[4]; /*p4个元素的一维数组*/}函数的参数传递可以采用地址传递。所以指针可作为函数参数注:C系统将形参数组名作为数组的指针变量来处理。☆形参、实参都是数组名☆实参是数组名,形参是指针变☆形参、实参都是指针变量☆实参是指针变量,形参是数组字符串的表示形在C语言中,可以用两种方法实现对字符串的操用字符数组处理字符charstr[]=“Ilove字符数组名可作函数参数,字符指针变量也可作函数参数不能用赋值语句给字符数组charstr=“Ilove!” char*p;p=“ 这是正确的但要注意赋给指针变量p定义一个数组,在编译时分配存放n个元素的空间;(6)printfchar*format=“a=%d,b=%f\n”;printf(format,a,b)9.3.3即:指针数组中每一个元素(下标变量)都是指针变量指针数组的定义形式<类型><数据类型><*指针数组名>[数组长度][={地址列表}];Staicint由于[]比*p[4]4个元素:p[0],p[1]

温馨提示

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

评论

0/150

提交评论