变量的指针就是变量的地址。存放变量地址的变量是指针变量。即在C语言中,允许用一个变量来存放指针,这种变量称为指针变量(Pointer variable)。因此,一个指针变量的值就是某个变量的地址或称为某个变量的指针。
指针变量与普通变量一样,变量内容可变,但两者的存储内容却完全不同。如有定义"short int a=21,*p=&a;",其存储结构如图9.2所示。
图9.2 内存地址与存储内容
变量a中存储的是数值21,而变量p中存储的内容为2000,并非普通的数值2000,而是变量a 的存储地址2000。
C语言规定所有变量在使用前必须先定义,指定其类型,并按此分配内存单元。指针变量虽不同于前面已学过的变量,是专门用来存放地址的,但也要在使用前事先定义,且必须定义为"指针类型"。
指针变量定义的一般形式:
类型*指针变量名;
例如:int*p1;
表示pl 是一个指针变量,它的值是某个整型变量的地址。或者说pl 指向一个整型变量。至于pl 究竟指向哪一个整型变量,应由向pl 赋予的地址来决定。
说明:
(1)类型是指针变量所指向的变量的类型,说明指针变量只能指向该类型的变量,不能指向其他类型的变量。
(2)指针变量名前有一个"*",表示该变量是指针类型的,它是指针变量的标志,如前面定义了一个整型指针变量p1,而非*pl。
(3)指针变量名要满足标识符的命名约定。
(4)指针变量一旦定义,其所占内存空间即固定。一个指针变量只能指向同一类型的变量。如:
注意:一个指针变量只能指向同类型的变量,如p3 只能指向浮点型变量,不能时而指向一个浮点型变量,时而又指向一个字符型变量。
2.指针变量的赋值
指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱甚至死机。指针变量的赋值只能赋予变量地址,决不能赋予任何其他数据,否则将引起错误。在C语言中,变量的地址是由编译系统分配的,用户不知道变量的具体地址。
C语言中提供了地址运算符&来表示变量的地址。
其一般形式为:&变量名;
如:&a表示变量a 的地址,&b表示变量b 的地址。变量本身必须预先说明。设有指向整型变量的指针变量p,要把整型变量a的地址赋予p可以有以下两种方式:
(1)指针变量初始化的方法。
(2)赋值语句的方法。
(www.xing528.com)
注意:不允许把一个数值赋予指针变量,如int*p;p=1000;这样的赋值是错误的。
【例9.1】输入a 和b 两个整数,按从大到小的顺序输出a 和b。
程序代码:
运行结果:
程序讲解:
本例程序中,根据输出可以发现a 和b 的值并未交换,它们仍保持原值,但p1 和p2 的值改变了。p1的值原为&a,后来变成&b;p2值原为&b,后来变成&a。这样在输出*p1和*p2时,实际上是输出变量b 和a 的值。
3.指针变量的运算
指针变量可以进行某些运算,但其运算的种类是有限的。它只能进行赋值运算和部分算术运算及关系运算。
(1)取地址运算符&。
取地址运算符&是一个单目运算符,其结合性为自右至左,它的功能是获取变量的地址。其运算对象要求是一个变量,不能是常量或表达式。
例如:
(2)指针运算符*。
指针运算符*是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。
注意,"*"在不同场合出现,可表示不同的含义:
●一个普通的字符星号;
●乘号运算符;
●定义变量时指针变量的标志;
●指针运算符。
例如:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。