第二课
本课主题: 数组的指针和指向数组的指针变量
教学目的: 掌握数组的指针与数组元素的指针的关系。掌握通过指针引用数组元素的方法。掌握数组名作函数参数的方法。
教学重点: 数组的指针与数组元素的指针的关系。通过指针引用数组元素。
教学难点: 通过指针引用数组元素。
授课内容:
一、什么是数组的指针?
一个数组包含若干元素,元素连续顺序地存储在内存中。数组元素与单个变量无异,它们都有自己的地址。我们约定数组的地址就是数组中第一个元素的地址。数组的指针即数组的起始地址。
二、指向数组元素的指针变量
把数组元素看成普通变量即可。
main()
{int a[10];
int *p; /*指针变量*/
p=&a[3]; /*指针变量存储了数组第4个元素的地址,也称该变量指向数组a的第4个元素*/
*p=5; /*向p指向的地址中存储数据5,即a[3]的值现为5 */
}
三、通过数组指针引用数组元素
数组名本身即是数组的指针。通常引用数组元素的方法是下标引用法,即用[]下标运算符进行引用。
也可以通过指针法进行引用。
/*e09-06.c*/
main()
{int a[10]={0,1,2,3,4,5,6,7,8,9};
int t;
int *p;
p=&a[0]; /*p指向数组第一个元素,也可以说p指向数组a */
t=*p; /*取数组第一个元素值赋给变量t */
t=*(p+2);/*取数组第三个元素值赋给变量t */
t=a[2]; /*当然是数组第三个元素啦*/
t=*(a+2); /*同样是数组第三个元素,这里把数组名看成是数组的起始地址*/
t=p[2]; /*这样也可以!*/
t=(p+2)[0];/*这样呢?可以!因为p指向数组第一个元素,它的下两个当然是第三个元素啦*/
}大家总结一下指针法引用与下标引用。其中关键的部分是理解[]运算符的用法。
四、数组名作函数参数
因为数组名即数组的起始地址,因此数组名作函数参数实际上是把数组的起始地址传递给对应的形参。形参接受的是数组的起始地址。通过引用形参数组名称对数组元素的引用,实际上是通过地址间接引用的,所以对形参数组元素的改变也就是对实参数组元素的改变。
下面看一个例子:
从10个数中找出其中最大值和最小值。
五、注意
数组名虽然是数组的地址,但它和指向数组的指针变量不完全相同。指针变量的值可以改变,即它可以随时指向不同的数组或同类型变量,而数组名自它定义时起就确定下来,不能通过赋值的方式使该数组名指向另外一个数组了。