第12章 再谈指针.pptVIP

  • 4
  • 0
  • 约1.83千字
  • 约 57页
  • 2018-01-21 发布于湖北
  • 举报
第12章 再谈指针

;【任务12.1】判断回文 ; 指向一维数组的指针 对一维数组元素的访问共有三种方式: 1.通过下标访问数组元素: int a[10], i ; for (i = 0; i 10; i++) a[i] = i ; ; 2.通过地址访问数组元素 如下语句通过数组元素的存储地址实现为每个 数组元素赋值: int a[10], i ; for (i = 0; i 10; i++) *(a + i) = i ; 其中,a+i表示第i个数组元素在内存中的起始地址,*(a + i)用间接引用运算符访问地址为a+i的存储单元,相当于a[i]。 ;;如下语句通过指向数组元素的指针实现为每个数组元素赋值: int a[10], i ; int *p = a ; for (i = 0; i 10; i++) *(p + i) = i ; 如下语句同样实现为数组元素赋值: int a[10], i ; int *p = a ; for (i = 0; p (a + 10); i++, p++) *p = i ; ;;;;指向二维数组的指针 二维数组是一维数组的推广,即可以把二维数组的每一行看成是一个一维数组,其中每个数组元素是一个一维数组,如图11.4所示。 a为二维数组的首地址,也就是数组a[0]的首地址,则a + 1表示数组a[1]的首地址,a + 2表示数组a[2]的首地址,如图11.5所示。则二维数组元素a[i][j]的存储地址a[i][j]为a[i] + j。 ;12.1 二维数组指针 ;12.1 二维数组指针 ;;2.通过地址访问数组元素: 对于二维数组元素a[i][j],“[ ]”实际上是变址运算符,即将元素a[i][j]的存储地址转换为a[i] +j。因此,为了提高运行速度,可以直接通过地址访问数组元素。例如,如下语句通过数组元素的存储地址实现为二维数组元素赋值: int a[3][4] ; int i, j ; for(i = 0; i 3; i++) for(j = 0; j 4; j++) *(a + i * 4 + j) = i + j ; ;;;如果数组元素是指针,则构成了指针数组。 [语法]声明一维指针数组的一般形式如下: ;[语义]定义一个指针数组变量,数组元素为指向基类型的指针。 如下语句定义并初始化一维数组str[3],元素str[i]为字符串指针,其存储示意图如图12.6所示。 ;11.1.3 指针数组 ;;;;指向结构体的指针;定义一个结构体指针后,需要将该指针与一个结构体变量的地址绑定,例如,如下语句声明并初始化了一个指向结构体的指针p,其操作示意图如图11.7所示。 ;12.2.1指向结???体的指针——结构体指针 ;C/C++语言提供了专门运算符“-”(减号后紧跟大于号),通过指针访问结构体成员的一般形式如下:;12.2.1指向结构体的指针——结构体指针 ;;;;;;解决任务12.2的程序;解决任务12.2的程序;【任务12.3】进制转换;;;;;;;12.3.1 申请和释放存储空间;12.3.1 申请和释放存储空间;12.3.1 申请和释放存储空间;12.3.1 申请和释放存储空间;12.3.2 指针和链表 ;12.3.2 指针和链表 ;显然,单链表中每个结点的存储地址存放在其前驱结点(即前一个结点)的next域中,而第一个结点无前驱,所以设头指针指向第一个结点(称为开始结点);同时,由于最后一个结点无后继结点,故最后一个结点(称为终端结点)的指针域为空,即NULL(图示中用“∧”表示),也称尾标志。为了方便运算,通常在单链表的开始结点之前附设一个类型相同的结点,称为头结点。含有4个数据a1、a2、a3和a4的单链表如图12.12所示。。 ;12.3.2 指针和链表 ;12.3.2 指针和链表 ;需要强调的是,工作指针p后移不能写作p++,因为 链表不是顺序存储,p++后指针p不一定指向原结点 p的后继结点,如图12.14所示。 ;12.3.2 指针和链表 ;12.3.2 指针和链表 ; 解决任务12.3的程序 ; 解决任务12.3的程序 ; 解决任务12.3的程序 ;12.4 程序设计实例

文档评论(0)

1亿VIP精品文档

相关文档