指针变量使用前需要先定义,定义的形式如下:
目标数据对象类型 *指针变量名1, *指针变量名2, … ;
说明:
①“目标数据对象类型”表示指针变量所指变量的类型,而不是指针本身数据值的类型。它可以是基本数据类型,也可以是构造数据类型。一个指针变量中存放的是一个存储单元的地址值。这里一个存储单元中的“一”所代表的字节数是不同的。
例如:
对char类型而言,一个存储单元代表1个字节。
对short int类型而言,一个存储单元代表2个字节。
对int类型而言,一个存储单元代表4个字节。
对float类型而言,一个存储单元代表4个字节。
对double类型而言,一个存储单元代表8个字节。
对于不同类型的指针变量,其内容增1、减1所“跨越”的字节数是不同的。因此定义指针变量时,必须区分“目标数据对象类型”,类型不同的指针变量不能够混合使用。
② 指针变量名遵循变量的命名规则。*表示定义的变量是一个指针变量。
例如:
char *p1, *p2; // 定义两个指针变量p1和 p2,两者均可指向字符型变量。
int *p; //定义指针变量p,它可以指向整型变量
对“int *p;”语句而言,p代表指针变量,它的值是某个整型变量的地址。其中,*p是p所指向的变量。
注意:通常在不致引起混淆的情况下,将C语言中的指针变量简称为指针。
2.指针变量赋值
指针变量可以赋变量的地址值或“空”值。
(1)给指针变量赋地址值
给指针变量赋地址值常见以下2种方法:(www.xing528.com)
① 通过地址运算符“&”获得地址值
通过地址运算符“&”,求出运算对象的地址,把这个地址赋给指针变量。
例如:
int a=10, *pa;
pa=&a; // 指针变量pa通过地址运算符“&”获得变量a的地址
② 通过指针变量获得地址值
通过赋值运算,把同类型的一个指针变量的地址赋给另一个指针变量,从而使这两个指针指向同一个地址。
float b=5.8, *p1,*p2;
p1=&b; // 将变量b的地址赋给指针变量p1
p2=p1; // 指针变量p2通过指针变量p1获得变量b的地址
另外,通过标准函数也可以使指针变量获得地址值,即调用库函数malloc和calloc在内存中开辟动态存储单元,并把所开辟的动态存储单元的地址赋给指针变量。只不过这种方法不常使用。
(2)给指针变量赋“空”值
Null是在头文件stdio.h中定义的预定义符,Null的代码值为0。可以给指针变量赋Null值。例如:
int *p;
p=Null;
此时,称p为空指针。p并不是指向地址为0的存储单元,而是具有一个确定的“空”值。语句“p=Null;”等价于“p='\0'; ”或“p=0; ”。
由上面的叙述可知,定义的指针变量需要赋初值(初始化)。初始化指针变量是将一个与指针变量类型一致的变量的地址赋给指针变量,也可以将同类型的一个指针变量赋给另一个指针变量等。
例如:
在本例的开头处定义了指针变量p和p1,但它们并没有指向任何一个整型变量,只是提供指针变量,规定它们可以指向整型变量。然后使p指向i,使p1通过同类型的指针变量p获得变量i的地址(p1通过p间接指向i),最后三个printf函数的作用是相同的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。