
知识回顾1.指针概述2.指针与变量3.多级指针
知 识 回 顾 1.指针概述 2.指针与变量 3.多级指针

问题引出oo1.数组是连续存放的多变量2.数组中元素的位置可以通过下标来确定3.如果令指针指向数组开始位置,然后移动指针,就可以处理数组中的数据这就是本次课要讨论的第一部分内容:使用指针处理数组4.数组是大小固定的数据结构,运行时不能改变5.不适合数据变化频率很大的问题解决数据变化频率很大的问题就要使用动态内存分配
问 题 引 出 1.数组是连续存放的多变量 3.如果令指针指向数组开始位置,然后移动指针,就 可以处理数组中的数据 2.数组中元素的位置可以通过下标来确定 这就是本次课要讨论的第一部分内容: 使用指针处理数组 4.数组是大小固定的数据结构,运行时不能改变 5.不适合数据变化频率很大的问题 解决数据变化频率很大的问题就要使用动态内存分配

主要内容8888oB6.4指针与数组6.5动态内存分配小结目的要求复习思考题上机与编程实践独立作业
主 要 内 容 6.4 指针与数组 6.5 动态内存分配 目的要求 复习思考题 上机与编程实践 独立作业 小 结

6.4.1 指针与一一维数组o1.数组的有关知识回顾(1)数组是个数固定、按顺序存放的多个变量(2)数组名是地址数组元素名数组元素地址(a[o)aa[o]int a[5];(&a[1])a[n]数组名是指针常量,它是数组首元素的地(&a[2])a[2]非,a与&a[]等价(&a[3])a[3](&a[4])a[4]a图6-14数组名的含义
6.4.1 指针与一维数组 (1)数组是个数固定、按顺序存放的多个变量 (2)数组名是地址 图6-14 数组名的含义 1.数组的有关知识回顾

2.访问数组首元素的两种方法数组名[o]方法1:方法2:*数组名Hinclude2a[o]-aintmain(void)a[1]4intal5/=12.4:6.8.22a[2]6printf("%d%d/n",*a,a[oD);a[3]822a[4]return O;I/*main*/a数组名取闻接运笔a与ao是等价的数组名加下标都代表数组中第个元素图6-15使用数组名处理首元素
◆方法1: 数组名[0] ◆方法2: *数组名 2.访问数组首元素的两种方法 图6-15 使用数组名处理首元素

3.用指针指向数组元素(1)指向首元素方法1:指针名=数组名方法2:指针名=&数组名[0](2)指向任意元素方法:指针名=&数组名[i]]请一定记住:若指向了首元素,则指针名[i与数组名[i等价若指向了数组名[i]],则指针名[o]与数组名[i]等价
3.用指针指向数组元素 (1)指向首元素 ◆方法1: 指针名 = 数组名 ◆方法2: 指针名 = &数组名[0] (2)指向任意元素 方法: 指针名 = &数组名[i] 请一定记住: ◆若指向了首元素, 则指针名[i]与数组名[i]等价 ◆若指向了数组名[i],则指针名[0]与数组名[i]等价

4.指针算术运算(1)指针与整数的加、减运算一个指针量进行加或减整数n运算,作用是获得了当前位置后方或前方第n个元素的地址2p-1不管是指针常量还是变垃,宅们a整数运算的结果是得到了该地4Pa+1前方或后方第个数居的在储6a+2p+1地址(地址小的为前,人的为8a+3后)p+222a+4p+3a图6-18指针土n运算的意义
4.指针算术运算 (1)指针与整数的加、减运算 一个指针量进行加或减整数n运算,作用是获得了当前位 置后方或前方第n个元素的地址 图6-18 指针±n运算的意义

表6-1处理一维数组元素的方法取元素的地址取元素的值&a[0]a[0]p[0]a+0P+ O*(a + 0)*(p + 0)&a[1]a[1]p[1]*(a + 1)*(p + 1)a+1P + 1&a[2]a[2]p[2]a+2P+ 2*(a + 2)*(p + 2)&a[3]a[3]p[3]a+3P+3*(a + 3)*(p + 3)a[4]p[4]P+48a[4]*(a + 4)*(p + 4)8+ 4

(2)指针自增、目自减运算①和一般变量一样,指针可以进行(++)或(-)运算②作用是使指针向后或向前移动一个元素的位置若有以下定义:int a[5] = {1,2,3,4,5] ;int *pa = &a[2];举int b[5] int*pb=b; inty:则单独执行下面的语句的作用是:/*把a[2]的值赋给y后,Pa指向了a[3]*/y = *pa++;/*和上面作用完全等价*/y = *(pa++);例/*把a[2]的值赋给y后,a[2]的值增加1*/y = (*pa)++;/*Pa先指向a[3].然后把a[3]的值赋给y*y = *++pa;/*a[2]值先增加1.然后把a[2]的值赋给y*/y = ++*pa;/*把a[2]的值赋给b[0]后,pa指向a[3],pb指向b[1]*/*pb++ = *pa++;
(2)指针自增、自减运算 ①和一般变量一样,指针可以进行(++)或(-)运算 ②作用是使指针向后或向前移动一个元素的位置 举 例 若有以下定义: int a[5] = {1, 2, 3, 4, 5}; int *pa = &a[2]; int b[5]; int *pb = b; int y; 则单独执行下面的语句的作用是:

(3)指针其它运算(自学①指针相减运算两个指向同一个数组的指针之间可以进行相减运算,结果是两个指针跨过该类型数据的个数若有以下定义:inta[5] =[1,2,3,4,5] int *p1 = a, *p2 = &a[3];举则p2-p1的结果是:3a[3]a[o]a[1]a[2]a[4]23415例p2pl
(3)指针其它运算(自学) ①指针相减运算 两个指向同一个数组的指针之间可以进行相减运算,结果是两个 指针跨过该类型数据的个数 举 例 若有以下定义: int a[5] = {1, 2, 3, 4, 5}; int *p1 = a,*p2 = &a[3]; 则p2-p1的结果是: 3 a[0] a[1] a[2] a[3] a[4] 1 2 3 4 5 p1 p2