首页 百科知识 取地址运算符和指针运算符

取地址运算符和指针运算符

时间:2022-09-22 百科知识 版权反馈
【摘要】:指针变量可以进行递增和递减运算。当指针变量进行递增和递减运算时,并不是指针变量的值简单地增1或减1,而是指针变量此时所指向的内存单元地址同原先所指向的内存单元的地址相比较,向后或向前偏移了一个存储空间。因为p是一个指向int 型数据的指针变量,它所指向的数据占2个字节的存储空间,p++是p向后偏移了一个2字节的存储空间,所以p++的值为2001+2,即2003。

7.2.2 指针变量的引用

1.指针操作符

在指针变量中只能存放地址(指针),不能存放其他非地址类的数据。下面介绍两个相关的运算符:

①&:取地址运算符,放在变量的前面,取该变量的地址值。

②*:指针运算符(或称“间接访问”运算符),放在指针变量的前面,代表该指针变量所指向变量的值。

上述两个运算符是单目运算符,结合方式从右到左。

例如:

img427

输出结果为3,&i是变量i的地址,最后一个语句中的*p就是变量i的值3。

同样,可以推算出:&*p就是p,*&i就是i。

例7.1  通过指针变量访问具体变量。

程序如下(指向关系如图7-2所示):

img428

img429

图7-2

程序运行结果如下:

img430

2.指针运算

(1)指针变量可以进行递增和递减运算。当指针变量进行递增和递减运算时,并不是指针变量的值简单地增1或减1,而是指针变量此时所指向的内存单元地址同原先所指向的内存单元的地址相比较,向后或向前偏移了一个存储空间。

例如:

img431

输出结果为2003,而不是2002。因为p是一个指向int 型数据的指针变量,它所指向的数据占2个字节的存储空间,p++是p向后偏移了一个2字节的存储空间,所以p++的值为2001+2,即2003。

同样,如果有 float *p=2001;

img432

那么,输出结果为2005。

(2)指针可以进行适当的加减运算。除了指针和整数相加减、指针和指针相减以外,不允许对指针进行其他的任何算术操作。

特别要注意的是,不允许:

①指针间相除或相乘。

②两个指针相加。

③对指针使用位变换和屏蔽操作符。

④指向float和指向double类型数据的指针相加。

(3)在关系表达式中允许对两个指针进行比较运算。例如:已知两个指针p1和p2,下面语句是正确的:

if(p1<p2) printf("p1 point to lower memory than p2\n");

一般情况下,指针比较仅用于指向共同对象的两个或多个指针。

例7.2 指针运算的实例。

程序如下:

img433

程序运行结果如下:

img434

程序中的%p格式说明符是以指针形式显示指针。也可以用%x或%X格式说明符将指针以16进制形式显示。

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

我要反馈