- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章一维数组与一级指针资料
第五章 5.1 一维数组的定义和引用 5.2地址和指针的概念 5.2 变量的指针和指向变量的指 针变量 5.3一维数组名的双重含义 引入数组的目的:利用间接引用方式,访问一组数据。具体地说,从第一个数组元素的地址,计算出其他所有数组元素的地址,然后通过数组元素的地址,间接访问数组元素。 定义一个数组:需要: (1)指定数组名,这个名称代表着第一个数组元素的指针,是一个指针常量,等价于一个指针字面值常量,称为数组指针 (2)指定数组元素的类型,它是数组指针的基类型,是间接引用方式的基础 (3)指定数组长度,即数组包含的元素个数,它决定了数组指针在进行加减整数的算术运算时的有效范围 5.3一维数组名的双重含义 5.3一维数组名的双重含义 回顾:int m; ---m是一个整型变量的变量名,代表整型变量空间,m的类型标识为int 同理:int a[5]; ---a是一个数组变量的变量名,代表整个数组空间,a的类型标识为int[5] 因此,数组名a有双重含义: (1)是一个数组变量的变量名,代表整个数组空间,在a,sizeof(a)中体现该含义,但是数组变量不能通过其名称直接引用数组元素,因此数组名称“退化”了 (2)是指向第一个数组元素的指针常量,所有元素的地址可根据该常量的地址值计算求得,从而方便实现间接访问数组的元素 5.4一级指针变量与一维数组 引入数组的目的:传递数组首元素地址,相当于传递整个数组空间所有元素的值。 数组首元素地址可以传给?——基类型相同的指针变量 指针变量的定义: 回顾: 整数类型 int --- 整型变量 int x; 同理:基类型为整型的指针类型 int * --- 指针变量 int * x; 一维数组名是指针常量,当然可以将值 赋给基类型相同的指针变量,使指针变量 和数组指针在间接引用方式下“共享” 同一段数组空间,这相当于把数组空间的 数据传给了指针变量,称为地址传递, 例:int a[5]; int *p=a; 5.4一级指针变量与一维数组 当p=a后,有下列等价关系存在: (1)数组元素的表示: 下标法:p[i] 等价于a[i] 间接引用法:*(p+i) 等价于*(a+i) (2)数组元素地址的表示: 指针表达式法:p+i等价于a+i 元素取地址法:p[i]等价于a[i] 注意:(1)p是变量,因此它有存储空间可以取地址,即p是指向p存储空间的指针常量,其基类型为int* (2)p是变量,一般获得数组首元素地址值,也可以获得任意元素的地址值,例:p=a[2] 此时:p[0]等价于a[2], p[2]等价于a[4] 程序5.5:用一级指针访问一维数组元素示例 #includestdio.h int main( ) { int a[5]={10,15,20,25,30}; //数组初始化 int i,*p=a; //整型指针变量初始化等于a p[0]=-p[0]; //修改数组首元素的值,即a[0]=-10; p[1]=p[2]+p[3]; //修改数组第2个元素的值,即 a[1]=a[2]+a[3]; printf(print out address and value of each element by using pointer:\n); for (i=0;i5;i++) //利用指针输出数组每个元素的地址及元素值 printf(a[%d]=%x, a[%d]=%d\n,i,p+i,i,*(p+i)); printf(print out address and value of each element by using array:\n); for (i=0;i5;i++) //利用一维数组输出数组每个元素的地址及元素值 printf(a[%d]=%x, a[%d]=%d\n,i,a[i],i,a[i]); return 0; } 5.4一级指针变量与一维数组 一级指针变量定义时*的位置: 情况1:只定义一个指针变量,此时*位置可以近基类型名、近变量名或居中三者均可 例:int *p; int* p; int * p; 情况2:一条定义语句既定义基类型的变量,又定义指针变量,此时,*近指针变量 例:int a,*p,b; 情况3:一条定义语句定义多个同类型的指针变量时,每个指针变量前都跟一个*号 例:int *p,*q; 简单总结: (1)“*”贴近指针变量总是正确的 (2)每个指针变量前面都必须有一个“
文档评论(0)