zoukankan      html  css  js  c++  java
  • C++指针的操作和运算(转)

      既然指针是一种数据类型,那么它也应该有对应的操作或运算,正如整数能做加减乘除一样。但是每一种操作或运算都应该对这种数据类型有意义。比如两个实数可以用关系运算得知哪个大哪个小,而两个虚数却不能使用关系运算,因为比较虚数的大小是没有意义的。

      对于指针类型来说,可以使用的运算有:和整数做加法运算、和整数做减法运算、两指针做关系运算。很显然,指针类型的乘除法是没有意义的,也是不允许的。

    指针的加减运算

      指针的加减法和数的加减法是不同的。我们认为,指针只能够和整数做加减法运算(包括和整型常量、变量做加减法和自增自减)。其实这也不难理解,内存的存储空间是按“个”计算的,不会出现半个存储空间的情况。那么,指针的加减法是否在地址值上做加减呢?我们先写一段程序来验证一下指针加减法的运算结果:(程序8.3)
    #include "iostream.h"
    int main()
    {
       int a[5]={1,2,3,4,5};
       int *aptr=&a[0];//把数组首元素的地址给指针
       int i=1;
       for (int j=0;j<5;j++)
       {
          cout <<'(' <<aptr <<")=" <<*aptr <<endl;//输出指针内存储的地址和该地址的数据
          aptr=aptr+i;//指针和整型变量做加法
       }
       return 0;
    }

    运行结果:
    (0x0012FF6C)=1
    (0x0012FF70)=2
    (0x0012FF74)=3
    (0x0012FF78)=4
    (0x0012FF7C)=5

      我们发现,每次做了加法以后,地址值并不是相差1,而是相差了4。所以指针和整数做加法并不是简单地将地址值和整数相加。我们又发现,每次做了加法以后,能够输出原先指针所指的下一个元素。根据数组在内存中的存储情况我们不难得出这样一个结论:指针和整数C的加减法是指针向前或向后移动C个对应类型的存储区域,即可以得到以下公式:
        新地址=旧地址±C*每个对应数据类型的变量在内存中所占字节数

      因为每个int变量在内存中所占字节数为4,所以在程序8.3.1中每做完一次加法,新地址=旧地址+1*4=旧地址+4。如右上图8.3所示。

    指针的关系运算

      我们知道关系运算有等于、大于、小于、大于等于、小于等于和不等于六种。对于指针来说,等于和不等于就是判断两个指针的值是否相同或不同,即两个指针是否指向了相同或不同的地方。而大于和小于是判断指针的值哪个大哪个小。值较小的在存储器中的位置比较靠前,值较大的在存储器中的位置比较靠后。


     
    转载地址http://c.biancheng.net/cpp/biancheng/view/47.html
  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    KMP 算法总结
    SGU 275 To xor or not to xor
    hihocoder 1196 高斯消元.二
    hihoCoder 1195 高斯消元.一
    UvaLive 5026 Building Roads
    HDU 2196 computer
    Notions of Flow Networks and Flows
    C/C++代码中的笔误
  • 原文地址:https://www.cnblogs.com/tianshuowang/p/4665125.html
Copyright © 2011-2022 走看看