第四章指针、结构、联合和枚举
本章专门对第二节中提到的指针进行详细描述。并介绍Turbo C新增的数据类型:
结构、并集和枚举,其中结构和并集是前面提到的五种基本数据类型(整型、浮点型
指针、字符型、指针型和无值型)的组合。枚举是一个名为整数常量的集合。
最后阐述typedef和预处理指令。
要点
学习Turbo C语言。如果你不能用指针写出有效、正确、灵活的程序,你可以
认为你没有学好C语言。指针、地址、数组以及它们之间的关系是C语言最有特色的部分
。规范使用指针可以使程序简单明了。所以,我们不仅要学会如何正确使用指针
,还要学会在各种情况下正确使用指针变量。
1.指针和地址
1.1指针的基本概念和指针变量的定义
1.1.1指针变量的定义
我们知道变量在计算机中占据一个存储区域,变量的值就存储在这个区域
。在计算机中,可以通过访问或修改这个区域的内容来访问或修改相应的变量【在Turbo语言中,访问变量的方法之一就是先找到变量的地址,然后
通过地址来访问。这就是这里要讨论的指针及其指针变量。
所谓变量指针,其实就是指变量的地址。
的变量地址虽然在形式上与整数相似,但在概念上与之前介绍的整数不同。它属于一种新的数据类型,即
pin类型。在Turbo C中,一般用“指针”来表示这样一个表达式的类型&x,用“地址
”作为它的值。也就是说,如果x是一个整数变量,表达式的类型&x是一个指向整数的
指针,它的值是变量x的地址,同样,如果
double d;
那么&d的类型就是指向精度数d的指针,而&d的值就是双精度变量d的地址,所以用
针和地址来描述一个对象的两个方面。虽然&x和&d的值分别是整型变量X和
双精度变量D的地址,但是&x和&d的类型是不同的,一个是指向整型变量X的指针,
一个是指向双精度变量D的指针,传统上很多情况下混合使用
指针和地址这两个术语。
我们可以用以下方法定义指针类型变量。
int * IP;
首先说明它是一个指针变量。注意不要在定义中遗漏符号“*”,否则它将是一个通用的整型变量
。另外,定义中的int表示指针变量是指向整数
类型变量的指针,有时ip也可以称为指向整数的指针。Ip是存储整数
变量地址的变量。
指针变量的一般定义是:
类型标识符*标识符;
标识符是指针变量的名称,前面带“*”号表示该变量是指针变量
,最前面的“类型标识符”表示指针变量所指向的变量的类型。一个指针变量
只能指向同一类型的变量,也就是我们不能定义一个指针变量,它既可以指向整型变量,也可以指向双精度变量。
指针变量允许在其定义中包含初始化项。例如
int i,* IP = & I;
注意ip是用&i初始化的,不是*ip。和一般变量一样,如果外部
或静态指针变量的定义中没有初始化项,指针变量被初始化为NULL,其值
为0。Turbo C规定,当指针值为零时,指针不指向任何有效数据,有时将
指针称为空指针。因此,当调用一个函数返回一个指针时(在第5节中介绍过),它经常被用来返回
返回值为NULL以指示函数在调用中发生了一些错误。
1.1.2指针变量的引用
由于指针变量中只能存储地址,所以不要将整数赋给正在使用的指针变量
。下列赋值是非法的:
int * IP;
IP = 100;
假设
int i=200,x;
int * IP;
我们定义了两个整数变量I和X,还定义了一个指向整数的指针变量ip。I,x
可以存储整数,而ip只能存储整数变量的地址。我们可以把I的地址分配给IP:
IP = & I;
此时指针变量ip指向整型变量I,假设变量I的地址为1800,那么这个赋值可以形象地理解为
下图所示的连接。
IPi
┏━━━┓┏━━━┓
┃1800╂──→┃200┃
0条评论