C语言知识第8章1-王厚财
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
复习:
1.数值型数组与字符型数组的定义
2.数值型数组的赋初值与字符型数组的赋初值以及字符串的赋值
3.对于数值型数组的操作
4.对于字符串的操作及函数
5.排序
讲授新课:
第8章 指 针
指针是C语言中广泛使用的一种数据类型。
8.1 地址与指针
8.1.1数据在内存中的存储
计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个确定的编号,这个编号就是内存地址。
a x
见图8.1所示,内存的编号从0开始,连续进行编号。在实际处理中,地址通常采用十六进制数形式。
8.1.2 变量的地址
在C程序中定义了一个变量,C编译系统就会根据定义中变量的类型,为其分配一定字节数的内存空间,所分配存储空间的首地址称为此变量的地址。所分配存储空间中的数据就是这个变量的值,也就是存储单元的内容。
8.1.3 变量的存取方式
1.直接存取
一般情况下,我们在C程序中只需指出变量名就可以对变量进行存取操作,实际上也是对某个地址的存储单元进行操作。这种直接按变量的地址存取变量值的方式称为“直接存取”方式。
2.间接存取
与“直接存取”方式相对应的是“间接存取”方式。在C语言中,我们通过定义一种特殊的变量(即指针变量,一会我们将详细叙述;同时,为了叙述方便,我们将前面章节中定义的变量称为普通变量。)用于存放内存单元的地址,然后根据这种特殊的变量的内容(里面存放的是地址值)去访问相应的存储单元。这种方式称为“间接存取”方式。
“--- ”只是一种示意,形似“指针”。用来存放地址值的变量称为指针变量,“变量p指向了变量a”的含义是指针变量p中存放了变量a的地址。
8.1.4 指针变量
如果一个变量中存放是地址值,那么称这个变量为指针变量。常把指针变量简称为指针。定义指针的目的是为了通过指针去访问内存单元。
8.2 指针变量的定义与简单操作
8.2.1指针变量的定义与指针变量的基类型
1. 指针变量的定义
C语言规定所有变量在使用前必须定义,指定其类型,并按此分配内存单元。指针变量不同于普通变量,它是专门用来存放地址的。
定义指针变量的一般形式为:
类型说明符*指针变量名;
应该注意的是:虽然pa,pb和px三个指针变量分别指向不同类型的变量,但是pa,pb和px这三个变量本身在内存中所占的字节数是一样的。
2. 指针变量的基类型
既然指针变量都是用来存放地址值的,一个指针变量中存放的是一个存储单元的地址值。而一个存储单元可能包括多个字节(整型2个字节,长整型4个字节,双精度型8个字节等),这多个字节的首地址作为整个存储单元的地址。
我们还要讲到指针的移动,也就是要对地址进行增减运算,此时指针移动的最小单位是一个存储单元而不是一个字节。因此,对于基类型不同的指针变量,其增1、减1的字节数也是不一样的。所以指针变量必须区分基类型。
3.指向指针的指针
指针变量同普通变量一样,也要在内存中分配存储单元,这个存储单元也要有地址值,我们可以定义一个指针变量来存放此地址值,这个指针变量就称为指向指针的指针变量。
8.2.2指针变量的赋值
指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。指针变量的赋值只能赋予地址
一个指针变量可以有多种赋值方法:
1. 通过求地址运算来获得地址值
C语言中提供了地址运算符&来求一个内存单元的地址,&是一个单目运算符,我们可以利用求地址运算把一个变量的地址赋给指针变量。
求地址运算符&是用于求内存单元的地址,求地址运算符&应该放在变量的左边。
2. 指针变量间赋值
我们可以把一个指针变量的值赋予基类型相同的另一个指针变量,使这两个指针变量指向同一地址。
注意:当指针变量间赋值时,应保证赋值号两边的指针变量的基类型相同。
3. 给指针变量赋空值
定义一个指针变量后,若没有初始化或赋值,它的值是不确定的。注意:不能说该指针变量没有值,如果使用没有初始化或赋值的指针变量,可能产生不可预料的结果。为避免这种问题,可以给指针变量赋“空值”。
p=NULL;
NULL是在头文件stdio.h中有定义的预定义符,因此在使用NULL时,应该在程序的前面出现预定义命令行:#include “stdio.h”。NULL的代码值为0,所以,以上语句等价于:
p=’\0’;p=0;
4.指针变量的其它赋值方法
指针变量里面存放的是地址值,只要是地址值,我们都可以赋给指针变量。这包括后面将要学到的动态分配函数得到的地址值、数组的地址、函数的地址等等。
小结:
1.指针的定义
2.指针的意义及基类型
3.指向指针的指针
4.指针的赋值
作业:课后习题