第十章    指针
第十章指针变量本身有地址吗 变量的指针与指针变量
1、了解指针与地址的概念
2、掌握指针变量的定义、引用及指针变量作为参数
教学重点
指针变量的定义、引用及指针变量作为参数
教学难点
指针变量作为参数
课时安排
2
教学方法
讲授与演示法相结合
一、讲授新课
  一)地址与指针的概念
二)变量的指针与指针变量
变量的指针就是变量的地址。
指针变量是一种特殊类型的变量,它是用于专门存放地址的。
1、指针变量的定义
定义形式:基类型    *指针变量名;
注意:
1)指针变量前的“*”,表示改变量的类型为指针型变量,“*”后的才是指针变量名。
2)在定义指针变量时必须指定基类型
2、指针变量的引用
指针变量只能存放地址,不要将一个整型量(或其他任何非地址类型的数据)赋值给一个指针变量。
1)两个相关运算符:
1&:取地址运算符。可以获取某个变量的地址
2* 指针运算符,获取某个指针变量所值向的变量的值
3、指针变量作为函数参数
函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。
二、 课堂小结
本课介绍了指针与地址的概念,指针变量的定义、引用及作为参数的使用。
    指针:就是地址,即内存单元的编号。
    指针变量:用来存放另一变量的地址(即指针)的变量。
    例如:int  a=5, *p=&a;
          printf ( “%d”, *p );
注意:运算符*和&的用法,指针变量的自加自减运算。
备注
安排上机练习
第十章    指针
第十章 数组与指针
掌握指针与数组的知识
教学重点
指向数组的指针变量
教学难点
指向二维数组的指针
课时安排
2
教学方法
讲授与演示法相结合
一、复习引导
上节课介绍了指针变量的定义及其赋值。一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数组起始地址或某一元素的地址放到一个指针变量中)。
二、 讲授新课
所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。
    引用数组元素可以用下标法(如a[3]),也可以用指针法,即通过指向数组元素的指针到所需的元素。使用指针法能使目标程序质量高(占内存少,运行速度快)。
一)指向一维数组的指针
  定义形式:
    int  a[10];
    int  *p;
    p=&a[0];    或  p=a;     
  含义:把数组的首地址赋给指针变量p。
  也即: int  *p=&a[0];          或  int *p=a;
二)通过指针引用数组元素
    按C的规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一个数组中的下一个元素(而不是简单地加1)。
如果p的初值为&a[0],则:
          p+i a+i &a[i],即指向a数组的第i个元素。
          *(p+i) *(a+i)   a[i]
    指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价
引用数组元素时,可以用:
    1、下标法,如:a[i]
    2、指针法,如:*( a+i )    或  *( p+i )
      其中,a是数组名,p是指向数组的指针
三)数组名作函数参数
    用数组名作实参,在调用函数时是把数组的首地址传送给形参。即实参数组与形参数组共占同一段内存。
  如果有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应关系有以下4种情况:
1、形参和实参都用数组名;
2、实参用数组名,形参用指针变量;
3、实参形参都用指针变量;
4、实参为指针变量,形参为数组名。
四)指向二维数组的指针和指针变量
1、二维数组的地址
      int  a[3][4]
一级指针:(二维数组某一个元素的指针)
  a[i], *(a+i) , &a[i][0] 都是元素a[i][0]的地址。
  a[i]+j ,  *(a+i)+j , &a[i][j] 都是元素a[i][j]的地址。
二级指针:(二维数组某一的地址)
  a+i , &a[i]  是二维数组中第I行的地址(行号从0计算)
二维数组元素的引用:
(1) 下标法:a[i][j]
(2) 指针法: *a[i]+j ,  **(a+i)+j
  2、二维数组与指针
1)指向二维数组元素的指针变量(一级指针变量)
定义: 二维数组元素类型 *指针变量名;
使用过程与指向一维数组元素的指针变量基本相似,只是要注意数组越界情况。
2)指向二维数组某一行的指针变量(二级指针变量)
定义形式:数组元素类型  *指针变量名)[常量表达式]
含义:定义了一个指针变量,该指针变量指向一个长度为常量表达式值的一维数组
例如:int (*q)[4];
定义了一个指针变量q,他指向一个长度为4的整型数组,此时,q的值是该一维数组的起始地址,而不是该一维数组的第一个元素的地址。
有二维数组:
int  a[3][4]
若有:int (*q)[4];
使q指向二维数组第0行的赋值语句是:q = a;q=&a[0];
使q指向二维数组第i行的赋值语句是:q = a+i;q=&a[i];
在此前提下:二维数组元素a[i][j]可以采用 *(*q+j)引用。
若有:int *q
使q指向二维数组第一行第一个元素的赋值语句是q = a[0];q = *a;
三、课堂小结
本课介绍了指向数组的指针,主要是指向一维数组的指针。用指针变量p指向数组a,指针变量p可以++、--,表示指向数组的上一元素或下一元素。但C编译程序不作下标越界检查。使用指针既方便有灵活,但初学者容易搞错。还介绍了指针与二维数组,指向二维数组的指针有指向元素的指针和行指针,使用时应注意它们的区别。
四、布置作业
    《C语言习题解答》同步练习
备注
上机练习
第十章    指针
指针与字符串
在掌握指针与数组的知识基础上,掌握字符串的指针与指向字符串的指针变量
教学重点
指向字符串的指针变量
教学难点
用指针处理字符串
课时安排
2
教学方法
讲授与演示法相结合
一、讲授新课
一)字符串的指针和指向字符串的指针变量
1、字符串的表示形式
(1)用字符数组存放一个字符串。
(2)用字符指针指向一个字符串。
2、字符串指针作函数参数
3、字符指针变量和字符数组的讨论
(1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址,决不是将字符串放到字符指针变量中。
(2)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值;char  str[14];  str=“I love China.”;
对字符指针变量,可以采用下面方法赋值:
      char  *a;  a= “I love China.”;      /*赋给a的是串的首地址*/
(3)对字符指针变量赋初值:
        char  *a=“I love China.”;  等价于  char  *a;  a=“I love  China.”;
  而对数组的初始化:
        char  str[14]={“I love China.”}; 不等价于  char  str[14];
                                            str[]=“I love  China.”;
即数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。
(4)如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。 而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址值,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋一个地址值,则它并未具体指向一个确定的字符数据。这很危险。
(5)指针变量的值是可以改变的,数组名虽然代表地址,但它的值是不能改变的。可以下标形式引用所指的字符串中的字符。
(6)用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。也可以用字符数组实现,但由于不能采用赋值语句对数组整体赋值。
二、课堂小结
    本课介绍了指针与二维数组、指针与字符串,指向二维数组的指针有指向元素的指针和行指针,使用时应注意它们的区别。我们既要掌握用数组处理字符串,也要掌握用指针变量处理字符串。要区分这两种方法的不同之处。
三、布置作业
    《C语言习题解答》同步练习
备注
上机练习
第十章    指针
第十章 指针与函数、指针数组
1、了解指针与函数的概念
2、掌握指针数组,二级指针等知识
教学重点
掌握指针数组,二级指针等知识
教学难点
指针数组,二级指针
课时安排
2
教学方法
讲授与演示法相结合
一、复习引导
前面介绍了指针与维数组、指针与字符串,我们可以用指针变量指向整型变量、字符串、数组,也可以指向一个函数。
二、讲授新课
一)函数的指针和指向函数的指针变量
    函数的地址:函数存储区域的首地址就是该函数的入口点,其函数名表示了入口地址。
1、函数指针变量的定义:存储类型  数据类型  (*函数指针名)( );
2、返回指针值的函数
一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。其概念与以前类似,只是带回的值的类型是指针类型而已。
格式: 类型名  *函数名(参数表);
二)指针数组和指向指针的指针
1、指针数组的概念:一个数组中的元素均为指针类型,称为指针数组。
  形式:  存储类型  类型名  *数组名[数组长度]
2、指向指针的指针:二级指针的定义:  char  **p;
含义:表示指针变量p是指向一个字符指针变量(即指向字符型数据的指针变量)的。
三)指针数组作main函数的形参:
四)有关指针的数据类型和指针运算的小结
1、有关指针的数据类型的小结
见书中的表
2、指针运算小结
(1)指针变量加(减)一个整数 例:p++、p--、p+i、p-=i等 
(2)指针变量赋值
将一个变量地址赋给一个指针变量。p=&a;  p1=p2;
(3)指针变量可以有空值,即该指针变量不指向任何变量。如 :  p=NULL;
(4)两个指向同一数组元素的指针变量可以相减
(5)两个指向同一数组的指针变量可作关系运算
三、布置作业
    10.10、10.11、《C语言习题解答》同步练习
备注
上机练习

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。