我们知道变量在计算机内是占有一块存贮区域的,变量的值就存放在这块区域之中,在计算机内部,通过访问或修改这块区域的内容来访问或修改相应的变量。TurboC语言中,对于变量的访问形式之一, 就是先求出变量的地址,然后再通过地址对它进行访问,这就是这里所要论述的指针及其指针变量。

所谓变量的指针,实际上指变量的地址。变量的地址虽然在形式上好象类似于整数,但在概念上不同于以前介绍过的整数,它属于一种新的数据类型,即指针类型。TurboC中,一般用"指针"来指明这样一个表达式&x的类型,而用"地址"作为它的值,也就是说,若x为一整型变量,则表达式&x的类型是指向整数的指针,而它的值是变量x的地址。同样,若doubled; 则&d的类型是指向以精度数d的指针,而&d的值是双精度变量d的地址。所以,指针和地址是用来叙述一个对象的两个方面。虽然&x、&d的值分别是整型变量x和双精度变量d的地址,但&x、&d的类型是不同的,一个是指向整型变量x的指针,而另一个则是指向双精度变量d的指针。在习惯上,很多情况下指针和地址这两个术语混用了。

我们可以用下述方法来定义一个指针类型的变量。

int*ip;

首先说明了它是一指针类型的变量,注意在定义中不要漏写符号"*",否则它为一般的整型变量了。另外,在定义中的int表示该指针变量为指向整型数的指针类型的变量,有时也可称ip为指向整数的指针。ip是一个变量,它专门存放整型变量的地址。

指针变量的一般定义为:

类型标识符*标识符;

其中标识符是指针变量的名字,标识符前加了"*"号,表示该变量是指针变量,而最前面的"类型标识符"表示该指针变量所指向的变量的类型。一个指针变量只能指向同一种类型的变量,也就是讲,我们不能定义一个指针变量,既能指向一整型变量又能指向双精度变量。

指针变量在定义中允许带初始化项。如:

inti, *ip=&i;

注意,这里是用&i对ip初始化,而不是对*ip初始化。和一般变量一样,对于外部或静态指针变量在定义中若不带初始化项,指针变量被初始化为NULL,它的值为0。TurboC中规定,当指针值为零时,指针不指向任何有效数据,有时也称指针为空指针。因此,当调用一个要返回指针的函数(第五节中介绍)时,常使用返回值为NULL来指示函数调用中某些错误情况的发生。