【问题标题】:How to access array elements by pointer arithmetic in JavaJava中如何通过指针算法访问数组元素
【发布时间】:2012-07-30 10:24:15
【问题描述】:

鉴于 C 中的以下声明,我可以将“+”应用于地址,并访问 其他元素。

char toto[5];

换句话说,应用这个运算符 +

toto+0x04

在 Java 中访问不同的数组元素。

还有没有其他方法可以在java中实现这个操作?

非常感谢

【问题讨论】:

  • 你想达到什么目的?您是否尝试通过添加内存地址来访问数组中的元素?
  • 我可以在 X 上做到这一点,有没有办法在 Y 上做到这一点? 的答案几乎总是肯定的。在发布之前做一些研究。
  • 我很确定您不能在 java 中将内存地址添加到 char 数组中;)
  • 是的,就是这样,我正在尝试通过添加到内存地址来访问数组中的元素
  • 你应该将你最后的 cmets 发布到你的问题中,并写下你期望发生的事情(对于我们这些不太了解 C 的人)

标签: java c arrays iterator operators


【解决方案1】:

如果我是对的,您想访问数组中该位置的元素。你可以在java中做到这一点。

char foo[] = new char[]{'1', '2','3','4', '5'};
char fooAtPositionFour = foo[4];

并以这种方式分配一个新值:

foo[4] = 'x';

【讨论】:

    【解决方案2】:

    技术上没有,因为 toto+4 是一个地址,Java 的内存管理策略与 C 的完全不同。但是,您可以使用 toto[4] 获得 *(toto+4) ;)

    【讨论】:

      【解决方案3】:

      在java中几乎总是有另一种方式来实现你想要的。

      您很少直接处理char[]。首选使用 String 和 StringBuilder。

      String toto = "hello";
      String lastChar = toto.substring(4); // from the 4th character.
      

      从字面上回答你的问题。您可以将 sun.misc.Unsafe 与 get/putByte 或 get/putChar 类一起使用来进行指针运算,但我建议避免使用它,除非您真的非常需要。

      【讨论】:

        【解决方案4】:

        实际上我需要隔离最后四个字节,其中 param 是一个 char[]

        您需要最后四个字节还是最后一个字符?最后一个字符然后是toto[toto.length-1]

        对于最后四个字节,您需要将 char 数组(Java 中的 UTF-16,我不知道 C 中的编码是什么)转换为字节数组,然后取最后四个字节。

        new String(toto).toBytes("THE_CHAR_ENCODING_YOU_WANT_TO_USE")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-08
          • 1970-01-01
          • 2016-07-13
          • 1970-01-01
          • 2023-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多