C++ 初学者指南 第四篇(11)

必备技能 4.10:指针表达式
    在大部分的C++表达式中都可以使用指针。然而,指针的使用还是有一些规则的。还需要注意在使用指针的时候我们可能需要使用括号来把表达式的部分括起来,以便得到我们预期的结果。
指针用于算术表达式
    只有四种可以用于指针的算术运算符:++,--,+和-。为了理解指针用于算术表达式会发生什么,我们假设p1是一个int类型的指针,p1的值为2000(也就是说它指向的地址为2000)。假设我们使用的是32的整型类型,那么在表达式
p1++;
之后,p1的值就会是2004,而不是2001!这是因为,每次p1自增的时候,它就会指向下一个int数据。同样的原理也使用于自减。例如,假定p1的值为2000,那么表达式
p1--;
将使得p1的值变为1996。
    把上面示例中的原则推广开来,应用于指针的算术运算符有如下的规则:每次指针自增的时候,它会指向下一个基本类型的内存地址。每次指针自减的时候,它会指向上一个基本类型的内存地址。如果指针的类型为char类型,那么指针的自增和自减就和平时理解的自增和自减是一致的,这是因为char类型正好是一个字节。然而,任何其它类型的指针的自增和自减都是增加或者减少了基本类型的长度大小。
 上面的规则不仅仅局限于自增或者自减。我们还可以对指针加上一个正数或者减去一个正数。表达式
p1=p1+9;
会使得p1指向后面的第九个基本类型的位置。
    尽管我们不能把两个指针加起来,但是我们可以对两个指针进行相减(前提是它们的基本类型是一样的)。减法的结果就是两个指针的位置之间的基本类型数据的数量。
 除了可以把指针加上一个正数或者把指针和一个正数相减,以及两个指针之间的相减之外,指针不能用于其他的算术运算。例如,我们不能对一个指针加上一个float或者double类型的数据,也不能种指针中减去一个float或者double类型的数据。
 为了更加清楚的看到指针的算术运算的结果,可以执行下面的程序。下面的程序创建了一个int类型的指针i和一个double类型的指针f,然后分别给这两个这指针加上0-9的数字,并打印出结果。仔细观察输出地址的变化和指针基本类型的关系。(在32位的编译器下,i每次增加4,f每次增加8)注意在cout语句中使用指针会直接输出它的地址,输出的格式地址格式是CPU和环境可用的地址格式。

#include <iostream>
using namespace std;

int main ()
{
    int *i,j[10];
    double *f, g[10];
    int x;

    i = j;
    f = g;

    for ( x = 0; x < 10; x++ )
    {
        cout << i+x << ' ' << f+x << '\n';
    }

    return 0;
}

程序的输出结果如下(你还可能看到其他的输出结果):
0xbffff69c 0xbffff648
0xbffff6a0 0xbffff650
0xbffff6a4 0xbffff658
0xbffff6a8 0xbffff660
0xbffff6ac 0xbffff668
0xbffff6b0 0xbffff670
0xbffff6b4 0xbffff678
0xbffff6b8 0xbffff680
0xbffff6bc 0xbffff688
0xbffff6c0 0xbffff690
指针的比较
    我们可以用关系运算符,例如==,<和>来比较指针。通常情况下,为了保证两个指针相比较的结果是有意义的,这两个指针必须是有关系的。例如,两者指针是指向同一个数组的元素的。(在工程4-2中会看到这样的例子。)然而还有一种指针的比较:任何指针都可以可以空指针进行比较,空指针就是0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值