java模拟C语言的指针功能

Java也可以通过''引用"来模拟,C语言的指针功能:

    class  DataPoint
    {
      public int m_currPos;
      public int []m_data;
      public int m_total_len;

      public DataPoint()
      {
        m_currPos = 0;
        m_total_len = 0;

      }
      
      public DataPoint(int []iniData)
      {
          int len = iniData.length;
          m_total_len = len;
          m_data = new int[ len ];
          for(int i=0;i<len;i++)
          {
            m_data[i] = iniData[i];
          }
          m_currPos = 0;
      }

      public DataPoint(int []iniData,int len)
      {
          m_data = new int[ len ];
          m_total_len = len;
          for(int i=0;i<len;i++)
          {
            m_data[i] = iniData[i];
          }
          m_currPos = 0;
      }  
      
      public DataPoint(DataPoint datClass)
      {        
        int []iniData = datClass.m_data;
        int len = datClass.m_total_len;
        m_data = new int[ len ];
        m_total_len = len;
        for(int i=0;i<len;i++)
        {
          m_data[i] = iniData[i];
        }
        m_currPos = datClass.m_currPos;
      }      

      public void setCurrValue(int v)
      {
        if(m_currPos>=m_total_len)
        {
          System.out.println("Error,setCurrValue:Index "+m_currPos+" out of Maxbounds="+m_total_len);
          return;
        }
          m_data[m_currPos] = v;

         
      }

      public void pointPlusPlus()
      {
          m_currPos++;
      }      

      public void setCurrValueByPos(int v,int pos)
      {
          m_currPos = pos;
          m_data[m_currPos] = v;
      } 

      public void setCurrValueByClass(DataPoint datClass)
      {
         int[] retDat = datClass.getAllData();
         int len = retDat.length;
         if( m_data!=null)
         {
           m_data = null;
           m_data = new int[len];
         }
         for(int i=0;i<len;i++)
         {
           m_data[i] = retDat[i];
         }
          m_currPos = datClass.m_currPos;
          m_total_len = len;
      }         

      public void setCurrValueByNextPos(int v)
      {
          if(m_currPos>=m_total_len)
          { 
            System.out.println("Error,setCurrValueByNextPos:Index "+m_currPos+" out of Maxbounds="+m_total_len);
            return;
          }

          m_data[m_currPos] = v;
          m_currPos++;
      }               

      public int getCurrValue()
      {

          return m_data[m_currPos];
      }  

      public int[] getAllData()
      {
         return m_data;
      } 

      public int[] getDataFromPoint()
      {
        int len = m_total_len-m_currPos;
        if(len<=0)
          return null;
        int []retDat = new int[len];
        for(int i=0;i<len;i++)
        {
            retDat[i] = m_data[m_currPos+i];
        }
         return retDat;
      }       

    }

   public static void showHex(String info, int[] data)
    {  //调试数据显示函数
        int len = 0;
        if(data!=null)
                len=data.length;

        String str="";
        String buf="";
        for(int i=0;i<len;i++)
        {
                 buf = Integer.toHexString((short)(data[i])&0xff);
                 if( Integer.parseInt(buf,16)< 0x10 )
                      buf = "0"+buf;
                 str+= buf;
                 str+=" ";
        }
        System.out.println(info+"("+len+"): "+str);        
    }

==================Java=======================

int data_test[]={0,1,2,3,4};

DataPoint dat1 =  new DataPoint(data_test);

DataPoint dat2 = dat1;

dat2.pointPlusPlus();

dat2.pointPlusPlus();

dat2.setCurrValue( 9 ); 

//然后查看dat1的数据会变成0,1,9,3,4

==================对照C=======================

int data_test[]={0,1,2,3,4};

int *dat1 = data_test;

int *dat2 = dat1;

dat2++;

dat2++;

*dat2 = 0x09;

//然后查看dat1的数据会变成0,1,9,3,4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值