内容正文:
千锋教育
《C语言程序设计》
教学设计
课程名称: C语言程序设计教程
授课年级:
授课学期:
教师姓名:
2017年09月01日
课程名称
第8章 指针
计划学时
6学时
内容分析
本章主要介绍内存和地址、指针变量的定义、通过指针进行读写、空指针、变更指针保存的地址、指针自身的地址、指针运算、指针与数组、指针的类型、const与指针、void指针
教学目标
与
教学要求
要求学生理解指针的概念,掌握指针的运算、指针与数组、const与指针、void指针
教学重点
地址与指针的概念、通过指针进行读写、指针运算、指针与数组、const与指针
教学难点
地址与指针的概念、指针运算、指针与数组、const与指针、void指针
教学方式
课堂讲解及ppt演示。
教
学
过
程
第一课时
(内存和地址、指针变量的定义、通过指针进行读写、空指针、变更指针保存的地址、指针自身的地址)
内存和地址
前面提到过,变量其实就是用来放置数值等内容的“盒子”,每个盒子都可以容纳数据,并通过一个编号来标识。盒子也有自己的地址,计算机要找到某个盒子,必须知道该盒子的地址。
计算机的内存是以字节为单位的一段连续的存储空间,每个字节单元都有一个唯一的编号,这个编号就称为内存的地址。接下来用一张图来展示机器中的一些内存位置,如图8.1所示。
图8.1 机器中的内存位置
图8.1中每个盒子的存储类型为字节,每个字节都包含了存储一个字符所需要的位数。在许多现代的机器上,每个字节包含8个位,可以存储无符号值0至255,或有符号值-128-127。图8.1中并没有显示这些位置的内容,但内存中的每个位置总是包含一些值。每个字节通过地址来标识,如图8.1中方框上面的数字所示。
为了存储更大的值,可以把两个或更多个字节合在一起作为一个更大的内存单位。例如,许多机器以字为单位存储整数,每个字一般由2个或4个字节组成。接下来用一张图来表示4个字节的内存位置,如图8.2所示。
图8.2 机器中4字节的内存位置
举一个例子,这次盒子里显示了内存中4个整数的内容,如图8.3所示。
图8.3 内存中存放了4个整数
这里显示了4个整数,每个整数都位于对应的盒子中。如果大家记住了一个值的存储地址,那么以后可以根据这个地址取得这个值。
但是,要记住所有这些地址实在太繁琐了,因此高级语言所提供的特性之一就是通过名字而不是地址来访问内存的位置。接下来使用名字来代替地址,如图8.4所示。
图8.4 用变量来存储整数
当然,这些名字就是变量。有一点非常重要,必须记住,名字与内存位置之间的关联并不是硬件所提供的,它是由编译器为人们所实现的。所有这些变量正是为了人们而提供的一种更方便的方法用来记住地址——硬件仍然通过地址访问内存位置。在C语言中可以通过取地址运算符&来获取系统将某种数据存放在内存中的位置。
指针变量的定义
先举个例子,有个A盒子,打开A盒子有如下两种方法:第一种方法将A钥匙带在身上,需要时直接打开(直接访问);第二种方法将A钥匙放在B盒子,需要时,打开B盒子取出A钥匙,再打开A盒子(间接访问)。
如果把盒子比为内存,钥匙类比为内存地址,这时就可以把B盒子称为指针,即存放内存地址的变量称为“指针变量”。它与普通变量一样占用一定的存储空间,但它所包含的数值内存将会被解释成一个地址。这个地址可以看作是一个指示方向,它能够告诉程序在内存的哪个位置可以找到对应的数据。
从标准意义来讲,指针是指内存地址,同时也指代一种数据类型。而指针变量是指针类型的变量,它存放的内容是指针(某个内存地址)。虽然经常把指针变量简称为指针,但读者应该明确知道“指针”是地址,是一个常量;“指针变量”是存储着地址的指针类型的变量。指针变量的定义是使用一个特殊的符号*来区别的,具体语法格式如下:
数据类型 *指针变量名;
具体示例如下:
int *p1, *p2; // 定义了指向整型变量的指针变量p1,p2
char *p, c; // 定义了字符型变量c及指向字符型变量的指针变量p
通过指针进行读写
定义了指针之后,下一步就是如何使用已经定义的指针对它指向的内存进行读写。C语言提供了一个间接访问运算符*,通过它可以得到内存地址中的内容,进而进行读写操作。具体示例如下。
int a = 1, b;
b = *(&a) // &a表示a在内存中的地址, *(&a)表示访问a所在内存单元中的数据
空指针
指针变量是用来保存内存地址的变量,当定义一个指针后,如果没有用它来保存一个内存地址,那么该指针就是一个野指针,它的默认值是随机的,