指针与数组复习

        可用指针变量来访问数组中任一元素,通常将数组的首地址称为数组的指针,而将指向数组元素的指针变量称为指向数组的指针变量。使用指向数组的指针变量来处理数组中的元素,不仅可使程序紧凑,而且还可提高程序的运算速率。

1 .一维数组与指针

1.1数组指针
  数组的首地址称为数组指针。若定义整型数组a[5],系统为数组分配的地址从1000到1019(随机分配),则数组a的首地址1000为数组a的数组指针。数组的首地址可用数组名a表示,因此,数组a的数组指针=a=&a[0]。

1.2数组指针变量

存放数组元素地址的变量称为数组指针变量。如: 
  int a[5];
  int *p=&a[0];
  则p为数组指针变量。数组名a可用于表示数组的首地址,所以数组名a可作为数组指针使用。因此:p=a与p=&a[0] 的作用是相同的。但数组名a不能用来进行赋值运算、"++"、"- -"等运算。
  当指针变量指向数组首地址后,就可使用该指针变量对数组中任何一个元素变量进行存取操作。

访问数组元素值有三种方法:

(1)通过移动指针变量,依次访问数组元素。

(2)指针变量不变,用p+i或 a+i 访问数组第i个元素。

(3)以指针变量名作为数组名访问数组元素。

1.3 数组元素的引用 

  综上所述,对一维数组a[ ]而言,当p=a后,有如下等同关系成立:
  ① p+i=a+i=&a[i],即p+i、a+i 均表示第i个元素的地址&a[i]。
  ② *(p+i) =*(a+i)=p[i]= a[i]。即*(p+i), *(a+i), p[i]均表示第i个元素值a[i]。
  其中p[i] 的运行效率最高。
  由上所述可知:一维数组的第i个元素可用四种方式引用,即: a[i]、*(p+i) 、*(a+i)、p[i]。

2  二维数组与指针

        二维数组元素值在内存中是按行的顺序存放的。若定义二维整型数组a[3][3],假设编译系统为数组a分配的内存空间从1000开始到1035为止。因此,与一维数组类似,可用指针变量来访问二维数组元素。

        二维数组各元素按行排列可写成矩阵形式,若将第i行中的元素a[i][0]、a[i][1]、a[i][2]组成一维数组a[i] (i=0,1,2),则二维数组a[3][3]可看成是由三个一维数组元素a[0]、a[1]、a[2]组成。即:a[3][3]=(a[0],a[1],a[2]),其中:a[0]、a[1]、a[2]是分别表示二维数组a[3][3]的第0、1、2行元素。

即:a[0]=(a[0][0],a[0][1],a[0][2])
  a[1]=(a[1][0],a[1][1],a[1][2])
  a[2]=(a[2][0],a[2][1],a[2][2])
  因为数组名可用来表示数组的首地址,所以一维数组名a[i]可表示一维数组 (a[i][0],a[i][1],a[i][2])的首地址&a[i][0],即可表示第i行元素的首地址。因此,二维数组a中第i行首地址(即第i行第0列元素地址)可用a[i]表示。
  一维数组的第i个元素地址可表示为:数组名+i。因此一维数组a[i]中第j个元素a[i][j]地址可表示为:a[i]+j ,即:二维数组a中第i行第j列元素a[i][j]的地址可用a[i]+j来表示,而元素a[i]][j]的值为:*(a[i]+j)。

二维数组的元素地址与元素值

知道了二维数组的行地址与行首地址后,可以讨论二维数组的元素地址。
  因为 a[i]=*&a[i]= *(a+i),所以 *(a+i) 可以表示第 i行的首地址。因此二维数组第i行首地址有三种表示方法:a[i] 、*(a+i)、&a[i][0]。
  由此可推知:第i行第j列元素a[i][j]的地址有四种表示方法:
  a[i]+j 、*(a+i)+j、&a[i][0]+j、&a[i][j]
  而第i行第j列元素a[i][j]值也有四种表示方法:
  *(a[i]+j) 、 *(*(a+i)+j)、*(&a[i][0]+j)、a[i][j]
  
  二维数组a的行地址、行首地址、元素地址、元素值的各种表示方式:
  第i行行地址 :a+i、&a[i]
  第i行首地址(第i行第0列地址): a[i]、 *(a+i)、 &a[i][0]
  元素a[i][j]的地址: a[i]+j 、*(a+i)+j 、&a[i][0]+j、&a[i][j]
  第i行第j列元素值: *(a[i]+j) 、 *(*(a+i)+j) 、 *(&a[i][0]+j)、a[i][j]

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抱歉,根据提供的引用***供足够的信息来回答这个问题。但是,C语言数组在期末考试中通常涉及以下几个方面: 1. 声明和初始化数组:包括数组的数据类型、数组名、数组大小以及初始化数组的方法。 2. 数组访问和操作:包括通过索引访问数组元素、修改数组元素的值、计算数组的长度等。 3. 多维数组:包括二维数组、多维数组的声明和初始化、多维数组访问等。 4. 数组指针的关系:包括数组名和指针的关系、指针数组的转换、指针数组的操作等。 5. 数组作为函数参数:包括数组作为函数参数的传递方式、数组作为函数返回值的使用等。 如果您有具体的C语言数组期末考试题目,请提供更多的信息,我将尽力为您提供帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [《C语言程序设计》课程期末样卷7份,2023第一学期《C语言程序设计》期末复习资料](https://download.csdn.net/download/qq_41464123/88107680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [长春工业大学历年c语言期末考函试试题.doc](https://blog.csdn.net/weixin_30909873/article/details/117103207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值