C语言知识第8章1-王厚财

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.指针的赋值

作业:课后习题

相关文档
最新文档