首页 百科知识 指针变量的定义

指针变量的定义

时间:2022-10-20 百科知识 版权反馈
【摘要】:变量的指针就是变量的地址,专门用来存放变量地址的变量称为指针变量。指针变量名前的“*”不可少,它表明该变量是指针变量。既然指针变量存放的是变量的地址,它的值就不允许用户随意指定,这样就会造成混乱,指针变量的值可以通过取地址运算和地址赋值运算来取得。但是,需要注意,变化后指针变量所指单元可能没有值,也可能不是所期望的值,这一点应引起重视。

9.2.1 指针变量的定义

变量的指针就是变量的地址,专门用来存放变量地址的变量称为指针变量。C语言规定所有变量在使用前必须定义,指针变量也不例外,定义指针变量的一般形式是:

类型标识符*指针变量名;

这里,类型标识符说明该指针变量用来存放哪一种类型的变量的地址,可以是基本类型,也可以是构造类型,如结构体类型、指针类型等。指针变量名前的“*”不可少,它表明该变量是指针变量。例如:

img390

以上说明语句,定义了3个指向整型数据的指针变量和2个指向实型数据的指针变量(此时,它们并没有指向某一具体变量)。既然指针变量存放的是变量的地址,它的值就不允许用户随意指定,这样就会造成混乱,指针变量的值可以通过取地址运算和地址赋值运算来取得。如:

img391

此时,我们称指针变量p1指向变量i,指针变量p2和p3同时指向变量j,指针变量p4和p5同时指向变量x。但是语句:

p2=&y;p5=p1;p3=2800;都是错误的。因为一个指针变量只能指向同一个类型的变量,只能把指针(地址)赋予指针变量。

同普通变量一样,指针变量的赋初值也可在定义时进行。如:

img392

1.&和*运算

(1)&取地址运算符。

(2)*取值运算符。

&和*运算是同级运算,结合性是“从右至左”,运算级别低于()、[]、++、--、.等运算,高于算术、位移、关系、赋值等运算。

2.++和--运算

指针变量的++和--运算与指针变量的类型有关,确切来说,是与指针变量的类型所占用的存储字节的个数有关。

假如指向变量的指针变量pointer的值是4000,若pointer指向的是整型变量a,则分别执行pointer++和pointer--后,pointer的值分别是4002和3998;若pointer指向的是实型变量,则分别执行pointer++和pointer--后,pointer的值分别是4004和3996。但是,需要注意,变化后指针变量所指单元可能没有值,也可能不是所期望的值,这一点应引起重视。

3.指针的比较运算

同类型的指针变量可以作比较运算、差运算,不能做加运算。

以下给出一些指针运算的结论:

img393

【例9-1】指针运算的例子。

img394

程序执行结果:

img395

执行结果中前4个值说明a与*p1等价,b与*p2等价,后4个值分别用八进制输出的变量a,b,p1,p2的地址,但需说明的是在不同的环境下这些值未必就是上述值。第二行说明执行(*p2)++与b++是等价的。第三行说明执行*p1++和*p2-后,a,b的值不变,p1++的结果正好是原p2的值(177714),p2--的结果正好是原p1的值(177712),即p1指向b,p2指向a。第四行的说明执行*p2=99等价于a=99,因为此时p2是指向a的,b=88存储在177714单元。第五行的说明执行p1++和p2++后,p1和p2的值分别为177716和177714,此时p2又指向b,p1指向的177716单元的值无意义。第六行输出的不是2和-2,而是1和-1,说明p1指向p2的下一个存储单元,此时意义不大,后面将会看到,当两个指针指向同一数组的元素时,指针的差才有意义。我们还可以看到,变量a、b、p1、p2的地址是始终不变的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈