任务利用指针引用数组元素指向数组元素的指针_第1页
任务利用指针引用数组元素指向数组元素的指针_第2页
任务利用指针引用数组元素指向数组元素的指针_第3页
任务利用指针引用数组元素指向数组元素的指针_第4页
任务利用指针引用数组元素指向数组元素的指针_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

5.3.1指向数组元素的指针

p=&a[0];//使p指向a[0]元素

指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。

inta[10];//定义a为包含10个整型数据的数组

int*p;//定义p为指向整型数据的指针变量

下面两个语句等价:

int*p=&a[0]; int*p=a;p、a、&a[0]均代表数组a的首地址(a[0]的地址)。任务5.3利用指针引用数组元素5.3.2通过指针引用数组元素

如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。

(1)p+i和a+i就是a[i]的地址,即&a[i]。或者说它们指向数组a的第i个元素。

(2)*(p+i)或*(a+i)就是p+i或a+i所指向的数组元素,即a[i]。例如,*(p+5)或*(a+5)就是a[5]。即*(p+5)、*(a+5)、a[5]三者等价。(3)指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。

实际上,在编译时,对数组元素a[i]就是按*(a+i)处理的,因此[]实际上是变址运算符。

如果p的初值为&a[0],则:

任务5.3利用指针引用数组元素【例5.5】输出数组中的全部元素。(1)下标法。

引用一个数组元素有两种方法:(1)下标法,如a[i]形式。(2)指针法,即采用*(a+i)或*(p+i)形式。5.3.2通过指针引用数组元素任务5.3利用指针引用数组元素【例5.5】输出数组中的全部元素。(2)通过数组名计算元素的地址,找出元素的值。5.3.2通过指针引用数组元素任务5.3利用指针引用数组元素【例5.5】输出数组中的全部元素。(3)用指针变量指向数组元素。

5.3.2通过指针引用数组元素

第(3)种方法比第(1)种和第(2)种方法快,用指针变量直接指向元素,不必每次都重新计算地址。这种有规律地改变地址值(p++)能大大提高执行效率。

顺序访问数组元素时:任务5.3利用指针引用数组元素

(1)可以通过改变指针变量的值(如p++)而指向不同的元素,这是合法的。而a++是错误的,因为a是数组名,它是数组的首地址,是常量。(2)要注意指针变量的当前值。

在使用指针变量指向数组元素时,要特别注意:

【例5.6】通过指针变量输出a数组的5个元素。

从运行结果看,没有实现要求。如何改正?5.3.2通过指针引用数组元素任务5.3利用指针引用数组元素【例5.7】通过指针变量找出数组元素的最大值和最小值。5.3.2通过指针引用数组元素#include<stdio.h>intmain(void){ inta[5]={23,12,34,78,55};

int*p,*max,*min;

//定义3个指针变量

p=max=min=a;

//将3个指针变量同时指向数组首元素

for(p=a;p<a+5;p++)

{

if(*p>*max)max=p;

//更新max指向

if(*p<*min)min=p;

//更新min指向

}

printf("max=%d,min=%d\n",*max,*min);}任务5.3利用指针引用数组元素5.3.3用数组名作函数参数在4.4.2节曾介绍过数组名可以作函数的实参和形参。

实际上,C语言编译系统都是将形参数组名作为指针变量(存放地址)来处理的,并非真正开辟一个新的数组空间。voidf(intb[

],intn)相当于:void

f(int*b,intn)任务5.3利用指针引用数组元素

普通变量、数组元素,普通变量的地址、指针变量、数组名都可以作为函数参数:5.3.3用数组名作函数参数任务5.3利用指针引用数组元素若有一实参数组,要想通过函数调用改变此数组中元素的值,实参和形参的对应关系有4种情况:(1)实参和形参都用数组名(2)实参用数组名,形参用指针变量5.3.3用数组名作函数参数任务5.3利用指针引用数组元素(3)实参和形参都用指针变量

(4)实参用指针变量,形参用数组名

5.3.3用数组名作函数参数若有一实参数组,要想通过函数调用改变此数组中元素的值,实参和形参的对应关系有4种情况:任务5.3利用指针引用数组元素【例5.8】用指针变量作函数形参,改写例4.7给出的程序。5.3.3用数组名作函数参数任务5.3利用指针引用数组元素1、二维数组元素的地址C语言中,二维数组a又可看作是一个特殊的一维数组。有3个行元素:a[0]、a[1]、a[2],而每个行元素又是一个包含4个列元素的一维数组,此时把a[0]、a[1]、a[2]看作一维数组名。

根据一维数组的指针知识,a+i代表元素a[i]的地址&a[i],而在二维数组中,元素a[i]是包含4个元素的一维数组,因此a+i代表第i行的首地址(起始地址)。aa+1a+2a[0]、a[1]、a[2]既然是一维数组名,而数组名代表数组首元素的地址,因此a[0]代表一维数组a[0]中第0列元素的地址,即&a[0][0]。同理,a[1]代表&a[1][0],a[2]代表&a[2][0]。据此,a[i][j]的地址&a[i][j]可用a[i]+j表示。a[0]+0a[0]+1a[0]+2a[0]+35.3.4通过指针引用多维数组任务5.3利用指针引用数组元素a[i]与*(a+i)等价!1、二维数组元素的地址5.3.4通过指针引用多维数组

(1)a与a[0]指向同一个地址,区别:a指向一维数组,而a[0]指向a[0][0]元素。a+1中的“1”代表一行中全部整型元素所占的字节数(VC中为16字节),而a[0]+1中的“1”代表一个整型元素所占的字节数(VC中为4字节)。

(2)在行指针(a+i)的前面加一个*,就转换为列指针(指向第i行第0列元素)。例如,a、a+1是指向行的指针,而*a、*(a+1)就成为指向列的指针,分别指向数组第0行第0列的元素和第1行第0列的元素。

在列指针a[i]前面加&,就成为指向第i行的行指针。例如,a[0]是指向数组第0行第0列元素的指针,而&a[0]是指向第0行的行指针。任务5.3利用指针引用数组元素2、指向二维数组的指针变量(1)指向二维数组元素的指针变量【例5.10】有一3×4的整型二维数组,要求用指向数组元素的指针变量输出二维数组各元素的值。

分析:二维数组的元素在内存中是按行顺序存放的,12个元素的地址依次为a[0]~a[0]+11,因此可以用一个指向二维数组元素的指针,依次指向各个元素。5.3.4通过指针引用多维数组任务5.3利用指针引用数组元素(2)指向由n个元素组成的一维数组的指针变量:(*p)[n]

指针变量p先指向第0行a[0](即p=&a[0]),则p+1指向第1行a[1],p的增值以一维数组中n个元素的长度为单位。5.3.4通过指针引用多维数组2、指向二维数组的指针变量p是指向由4个元素组成的一维数组的指针,p的值是该一维数组的起始地址。p不能指向一维数组中的某一个元素。任务5.3利用指针引用数组元素【例5.11】有一3×4的整型二维数组,要求用指向由n个元素组成的一维数组的指针变量输出二维数组各元素的值。(2)指向由n个元素组成的一维数组的指针变量:(*p)[n]5.3.4通过指针引用多维数组2、指向二维数组的指针变量任务5.3利用指针引用数组元素3、用指向二维数组的指针变量作函数参数5.3.4通过指针引用多维数组

用指针变量作

温馨提示

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

评论

0/150

提交评论