
程序设计在线开放课程 指针 指针与二维数组指针数组 主讲:曾志华
指针 ——指针与二维数组 指针数组 在线开放课程 主讲:曾志华

一.指针与二维数组之间的关系 程序设计 inta[3][4]; 2000 地址 对应值 a 2009 a[o] a[O][o] a[0]+0 *(a[0]+0) a[0]+i 2002 *a[0]+1) *(a+0)+i a[o[1] a9丰 对 二 a[o][2] a+1 2008 a[o][3] 2008 a+包含: a[1] a[1]+i 2019 a[1][o] a1+0,的f21 a[1[1] a[1]+1*(a[1]+1)j *(a+1)+i a[1][2] a(2)每个光素at) 2016 a+2 2016 a[1][3] a[1]+又是个维 a[2] 2018 a2][o] a[2]+数组,*(包啥4个 a[2]+i *(a+2)+i a21[1] a[2]+元素*(a[2]+1) a21[2] a[2]+2 *(a[2]+2) a2[3] a[2]+2 *(a[2]+2)
对于二维数组: (1)a是数组名, 包含三个元素 a[0],a[1],a[2] (2)每个元素a[i] 又是一个一维 数组,包含4个 元素 a a+1 a+2 int a[3] ; a[0] a[1] a[2] 2000 2008 2016 2000 2002 2008 2010 2016 2018 a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] a[0][2] a[0][3] a[1][2] a[1][3] a[2][2] a[2][3] a[0]+i a[1]+i a[2]+i *(a+0)+i *(a+1)+i *(a+2)+i [4] 地址 a[0]+0 a[0]+1 a[0]+2 a[0]+2 a[1]+0 a[1]+1 a[1]+2 a[1]+2 a[2]+0 a[2]+1 a[2]+2 a[2]+2 对应值 *(a[0]+0) *(a[0]+1) *(a[0]+2) *(a[0]+2) *(a[1]+0) *(a[1]+1) *(a[1]+2) *(a[1]+2) *(a[2]+0) *(a[2]+1) *(a[2]+2) *(a[2]+2) 一.指针与二维数组之间的关系

一.指针与二维数组之间的关系 语 inta[3][4]; 程序设计 地址表示: a[o][o] (1)a+1 行指针 a[o][1] (2)&a[1][o] a[o]2] (3)a[1] 列指针 a[o][3] (4)*(a+1) a[1][o] a[1[1] a[1][2] 地址表示: 二维数组元素表示形式: a[1][3] (1)&a[1][2] (1)a[1][2] a[2][0] (2)a[1]+2 (2)*(a[1]+2) a[21] (3)*(a+1)+2 (3)*(*(a+1)+2) a[2l[21 (4)&a[0][0]+1*4+2 (4)*(&a[0][0]+1*4+2) a23]
int a[3][4]; a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] a[0][2] a[0][3] a[1][2] a[1][3] a[2][2] a[2][3] 二维数组元素表示形式: (1)a[1][2] (2)*(a[1]+2) (3)*(*(a+1)+2) (4)*(&a[0][0]+1*4+2) 地址表示: (1) a+1 (2) &a[1][0] (3) a[1] (4) *(a+1) 行指针 列指针 地址表示: (1) &a[1][2] (2) a[1]+2 (3) *(a+1)+2 (4)&a[0][0]+1*4+2 一.指针与二维数组之间的关系

二.指向一维数组的指针变量 语 程序设计 定义形式:数据类型(*指针名[一维数组维数]; 例:int(*p)[4]: a inta314li— p a[o][o] p[0]+1或*p+1 a[0][1]s *(*p+1)或(*p)[1] afel[2] (不雅p指向二维数组复一维数组的03] int】 如p)闲与[明4番亏ap是特指1[0l p+1 a[1][1] p[1]+2或*(p+1)+2 维数组指针变量维数和 a[1][2]s *(*(p+1)+2) 二维数组列数必须相同 a+2 a[1][3] p+2 a[2][o] a2l[1] a21[2] a21[31
定义形式:数据类型 (*指针名)[一维数组维数]; 例: int (*p)[4]; ( )不能少 int (*p)[4]与int *p[4]不同 p的值是一维数组的 首地址,p是行指针 ◆可让p指向二维数组某一行 如 int a[3][4],(*p)[4]=a; int a[3][4]; a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] a[0][2] a[0][3] a[1][2] a[1][3] a[2][2] a[2][3] a a+1 a+2 p p+1 p+2 p[0]+1或 *p+1 p[1]+2或 *(p+1)+2 *(*p+1)或 (*p)[1] 一维数组指针变量维数和 *(*(p+1)+2) 二维数组列数必须相同 二.指向一维数组的指针变量

二.指向一维数组的指针变量 语 程高设计 例:一维数组指针变量举例 int a[3][41; main() a[ol[ol {static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; af0[11 int ij.(*p)[4]; a[o][2] for(p=a,i=0;i<3;i++,p++) a[o][3] for(j-0;j<4;j++) a[1][0] printf("%d ",*(*p+j));p]j] a[1][1] a[1l[2] printf("\n"); a[1][3] p=a[0]; a2][0] p=*a; X XX a2[1] p=&a[o][o]; a2j[2] p=&a[o]; a2[3]
例:一维数组指针变量举例 main() { static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int i,j,(*p)[4]; for(p=a,i=0;i<3;i++,p++) for(j=0;j<4;j++) printf("%d ",*(*p+j)); printf("\n"); } p=a[0]; p=*a; p=&a[0][0]; p=&a[0]; int a[3][4]; a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] a[0][2] a[0][3] a[1][2] a[1][3] a[2][2] a[2][3] p p p p[0][j] 二.指向一维数组的指针变量

语 三.指针数组 程序设计 作用:用于处理多个字符串 定义:数组中的元素为指针变量 定义形式:[存储类型]数据类型*数组名[数组长度说明]; 例:int*p[4]; 区分int*p[4]与int(*p)[4] 量的数据类型
作用:用于处理多个字符串 定义:数组中的元素为指针变量 定义形式:[存储类型] 数据类型 *数组名[数组长度说明]; 例:int *p[4]; 指针本身的存储类型 指针所指向变量的数据类型 区分int *p[4]与int(*p)[4] 三.指针数组

三.指针数组 程序设计 指针数组赋值与初始化 或: 赋值: main() main() char *p[4]; cha 初始化: p[0]="Fortran"; cha main() {char *p[]={"Fortran","Lisp","Basic",NULL); p[1]="Lisp"; cha p[2]="Basic"; cha 0801 p[3]=NULL; p[oj p[o] r t r am o p[1] L is p o 2] Ba ss ii c0 p3] 日
❖指针数组赋值与初始化 L i s p \0 F o r t r a n \0 B a s i c \0 p[0] p[1] p[2] p[3] 0 赋值: main() { char a[]="Fortran"; char b[]="Lisp"; char c[]="Basic"; char *p[4]; p[0]=a; p[1]=b; p[2]=c; p[3]=NULL; …….. } 或: main() { char *p[4]; p[0]= "Fortran"; p[1]= "Lisp"; p[2]= "Basic"; p[3]=NULL; …….. } 初始化: main() { char *p[]={"Fortran", "Lisp", "Basic",NULL}; …….. } L i s p \0 F o r t r a n \0 B a s i c \0 p[0] p[1] p[2] p[3] 0 三.指针数组