
程序设计基础(上) 张立红 13405330459(88028) QQ:2653453357 9#501
程序设计基础(上) 张立红 13405330459(88028) QQ:2653453357 9#501

第9章 指针
2

本章知识点 9.1地址和指针 9.2指针变量 9.3指向数组的指针变量 9.4函数指针变量 9.5返回指针值的函数 9.6指针数组和指向指针的指针 9.7小结 恩 3
本章知识点 9.1 地址和指针 9.2 指针变量 9.3 指向数组的指针变量 9.4 函数指针变量 9.5 返回指针值的函数 9.6 指针数组和指向指针的指针 9.7 小结 3

9.3 指向数组的指针变量 9.3.1指向数组元素的指针 9.3.2通过指针引用数组元素 9.3.3指向数组的指针变量作函数参数 9.3.4指向多维数组的指针变量
9.3.1 指向数组元素的指针 9.3.2 通过指针引用数组元素 9.3.3 指向数组的指针变量作函数参数 9.3.4 指向多维数组的指针变量

关于数组的术语 ①数组首地址(起始地址、数组的指针)一是一个地址常量。 ,计算机系统为数组分配的连续多个内存单元中第一个单元的 地址-用数组名表示。 例1:inta[5];∥假设数组a的首地址是2000。 数组a的首地址 ②数组元素的地址(数组元素的指针): ◆数组元素(与简单变量一样)的存储单元的首地址。2000 a[o] 例2:a[2]的地址是2008,即&a[2] 2004 a1] 2008 a[2 2012 a[3] 2016 a4] 5
①数组首地址(起始地址、数组的指针)—是一个地址常量。 Ø 计算机系统为数组分配的连续多个内存单元中第一个单元的 地址-用数组名表示。 例1:int a[5]; 关于数组的术语 2000 a[0] 2004 a[1] 2008 a[2] 2012 a[3] 2016 a[4] ②数组元素的地址(数组元素的指针): u 数组元素(与简单变量一样)的存储单元的首地址。 例2:a[2]的地址是2008,即&a[2] 5 数组 a的首地址 // 假设数组a的首地址是2000

9.3.1指向数组元素的指针P189 可以用一个指针变量指向一个数组元素。 例如: inta[10]={1,3,5,7,9,11,13,15,17,19}; int *p阳 1 a[o] ② p p=&a[o]; &.a[0] 3 5 等价于int*p=a; 7 等价于p=a; 或int*p=&a[0]; 9 11 注意1:数组名a代表数组首元素的地址。 13 注意2:p=a;是“把a数组的首元素的 15 17 地址赋给指针变量p”,而不是“把数组 19 a[9] a各元素的值赋给p
可以用一个指针变量指向一个数组元素。 int a[10]={1,3,5,7,9,11,13,15,17,19}; ① int *p; ② p = &a[0]; 等价于p=a; 等价于 int *p=a; 或int *p=&a[0]; 注意1:数组名 a 代表数组首元素的地址。 注意2:p=a; //是“把a数组的首元素的 地址赋给指针变量p” ,而不是“把数组 a各元素的值赋给p” 。 例如:

9.3.2 通过指针引用数组元素-P190 C语言规定:如果指针变量p已指向数组中的一个元素: ① p+1:指向同一数组中的下一个元素。 ② p-1:指向同一数组中的前一个元素。 例1:inta[10],*p=a;∥假设a[0]的地址是2000 则: ① p的值为2000 ② p+1的值为2004 越界!!! ③ p-1的值为1996
C语言规定:如果指针变量 p 已指向数组中的一个元素: ① p+1:指向同一数组中的下一个元素。 ② p-1:指向同一数组中的前一个元素。 例1:int a[10] , *p=a;// 假设a[0]的地址是2000 则: ① p的值为2000 ② p+1的值为2004 ③ p-1的值为1996 越界!!!

p→ 如果:p=&a[0];∥相当于p=a; p+1,a+1→ ao] (1)(p+i)或*(a+i)是p+i或a+i所指向 的数组元素-a[叮。 a2] 例如:*(p+5)或*(a+5)就是a[5] 对a[叮的求解过程:先按a+i*d 计算出数组元素的地址,然 p+i,a+i_ *(p+) a 后找出此地址所指向的单元 中的值。 a[8] p+9,a+9- a[9]
如果:p=&a[0]; // 相当于p=a; (1)*(p+i)或*(a+i)是p+i或a+i所指向 的数组元素-a[i]。 例如:*(p+5) 或*(a+5)就是a[5] 对a[i]的求解过程:先按a+i*d 计算出数组元素的地址,然 后找出此地址所指向的单元 中的值。 *(p+i)

p→ 如果:p=&a[0];∥p=a; p+1,at1> (2)指向数组元素的指针变量p也 羽明吧 可以带下标。 如:p叮、*(p+)、*(a+i)←a叮 · p+i,a+i- *(p+) a时 8 例1:inta[10]={2,4,6,8,10} a[8] p+9,a+9→ a[9] int *p=a; printf("%d%d%d%dn",p[2],*(p+2),a[2],*(a+2)i lp[2]、*(p+2)、*(a+2)←→a[2] 66 66
例1:int a[10]={2,4,6,8,10}; int *p=a; printf("%d %d %d %d\n" ,p[2], *(p+2),a[2], *(a+2)); //p[2]、 *(p+2)、 *(a+2) a[2] (2)指向数组元素的指针变量p也 可以带下标。 如:p[i]、 *(p+i)、 *(a+i) a[i] *(p+i) 如果:p=&a[0]; // p=a;

(3)如果指针p1和p2都指 a[0] 向同一数组的不同元素。 a[1] a[2] 则:p2-p1的值是4 p1 a3] /表示两者之间元素个数 a4] 注意:不能p1+p2 a[5] a[6] p23 a7] a[8] a[9]
(3) 如果指针p1和p2都指 向同一数组的不同元素。 则:p2-p1的值是4 //表示两者之间元素个数 注意:不能p1+p2 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] p1p2