- 16
- 0
- 约5.57千字
- 约 20页
- 2016-12-25 发布于天津
- 举报
高中信息技术 信息学奥赛C语言第九章数组与指针课件
第九章 数组与指针 主要内容 9.1 一维数组与指针 9.2 二维数组与指针 9.1 一维数组与指针 9.1.1 一维数组首地址和数组元素的地址 9.1.2 通过指针引用一维数组元素 9.1 一维数组和指针 9.1.1 一维数组和数组元素的地址 一维数组在主存中占连续的存储空间,数组名代表的是数组的首地址。 可定义一个指针变量,通过赋值或赋初值的形式,把数组名或数组的第一个元素的地址赋值该指针变量,该指针变量就指向了该数组。 值得注意的是,这个指针变量中的地址值不可改变,也就是说,不可以给数组名重新赋值,因而数组名也可以认为是一个地址常量。 9.1.1 一维数组首地址和数组元素的地址 9.1.2 通过指针引用一维数组元素 9.2 二维数组与指针 9.2.1 二维数组首地址和数组元素的地址 9.2.2 指针数组与二维数组 9.2.3 行指针 9.2.4 指针数组与行指针的区别 9.2.1 二维数组首地址和数组元素的地址 对二维数组 int a[3][4],有 a-----二维数组的首地址,即第0行的首地址,地址常量,不能进行赋值运算。 a+i-----第i行的首地址 a[i] ? *(a+i)------第i行第0列的元素地址 a[i]+j ? *(a+i)+j -----第i行第j列的元素地址 *(a[i]+j) ? *(*(a+i)+j) ? a[i][j] 9.2.2 指针数组与二维数组 指针数组 定义形式:类型名 *指针数组名[常量表达式] 例:int *p[3] 定义了一个具有三个元素的一维数组,其中每个元素只能存放指针,这些指针的基类型为整型,故称p为指针数组 说明:[]的优先级高于*的优先级,则*p[3]中,p先与[]结合,构成p[3],说明p是一个数组名; *说明数组p中的每个元素只能存放指针 通过指针数组引用二维数组元素 例: int *p[3],a[3][4],i,j; for( i=0;i3;i++) p[i]=a[i]; p[i]的基类型与a[i]的基类型相同 赋值号右边的a[i]代表a数组每行的首地址。 赋值号左边的p[i]是指针变量。 循环执行的结果是使p数组中的每个元素指向了a数组每行的开头。 当数组p中的每个元素指向a数组每行的开头时,则a数组中的元素: a [i] [j] *(a [i] + j) *( p [i] +j) 9.2.3 行指针 定义行指针 定义形式:数据类型 (*指针数组名)[常量表达式]; 例 int (*p)[4]; 9.2.4 指针数组与行指针的区别 int *p[3]:表示一个数组,它含有三个元素p[0]、p[1]、p[2]、p[4],且这三个元素只能存放整型元素的地址。 int (*p)[4]:表示一个指针变量,它仅有一个存储空间,只能存放一个长度为4的一维数组的指针。 * * a [0] a [1] a [2] a [3] a [9] ... 整型指针p a [0] a 若定义: int a[10],*p,i; 数组元素a[0]----a[9],都可以看作是一个变量,因此每个数组元素均有一个地址: a[i] (0=i=9) 使用p=a[0]将指针p指向数据元素a[0],由于数组元素在内存中是连续的,则可以通过移动指针p来访问数组中的每个元素。 在C语言中,数组占用一串连续的存储单元,如: C规定:数组名代表数组在内存中的起始地址,则a可表示数组a的首地址,也可使用p=a来让指针p指向数组a的起始地址。 a[0] a[1] a[2] a[3] a[9] ... 整型指针p **** a 注:数组名是表示数组首地址的地址常量,永远指向a数组的首地址,不能对a重新赋值。 对于一维数组a,数组名a是数组元素a[0]的地址,即a[0]与a是等值的。属性也相同,都是int 的地址。 a[1]是数组元素的地址; a[2]是数组元素的地址; a[i](0=i=9有效)是数组元素的地址; 例: int a[10]; a++; a=a[3]; 设有: int i,a[10],*p,p1,p2; 则: p=i; (将变量i地址?p) p=a; (将数组a首地址?p) p=a [i]; (将数组元素地址?p) p1=p2; (指针变量p2值?p1) 不能把一个整数?p,也不能把p的值?整型变量 如 int i, *p; p=1000; (?) i=p; (?) 指针变量所指的变量的
原创力文档

文档评论(0)