9

我是一个 Java 菜鸟。我已经能够掌握将 C/C++ 指针转换为 Java 引用的概念,而且进展相当顺利。

我打了一段代码,它有指向指针的指针(即**ptr)。我需要取消引用指针并更改它指向的指针的值(即*ptr = &newthing;)

这在java中似乎更难。有没有人对如何解决这个问题有任何想法?快速谷歌搜索什么也没发现。

这是 C++ 中的代码示例。我想在 java 中获得类似的工作,但 ptr_to_ptr 变量是一个问题:

struct _coord
{
   int x;
   int y;
   _coord * next_coordinate;
} coordinate_t;   

coordinate_t buffer[100];
coordinate_t * head;
coordinate_t ** ptr_to_ptr;

if (wednesday)
{
    ptr_to_ptr = &head;
}
else
{
    ptr_to_ptr = &head->next_coordinate;
}
*ptr_to_ptr = &buffer[3];   // <<<---- HOW DO YOU MAKE THIS WORK?
4

5 回答 5

14

在 Java 中可以用来对指向指针的指针建模的一个典型技巧是使用数组:对数组本身的引用充当“指针”,而数组元素充当所指向的项。您可以随意嵌套它们,但代码看起来不像在 C/C++ 中那样漂亮。

与其将 C/C++ 习语移植到 Java 中,不如构建一个可变类,让您可以更改其中的项目。此类将充当“指针”,为您提供您正在寻找的功能,它还将增加 Java 代码的可读性。泛型极大地简化了您的任务,只需要一种可以重用的实现。

于 2012-06-20T19:38:45.287 回答
4

那么指针的指针在 Java 中是不能直接映射的。我假设您想将一个新对象分配给函数内的指针。

据我所知,您只能通过使用充当引用的包装器对象来解决此问题,因此您可以修改内部的真实引用:

class ObjRef {

   public RealObj obj;

}

void modifyRef(ObjRef ref){

   ref.obj = new RealObj()

}

希望这可以帮助

于 2012-06-20T19:49:47.557 回答
3

我会回答我自己的问题。我找不到任何简单的方法来在 java 中执行指向指针(对引用的引用)的指针。所以我重构了代码以使用引用数组和数组索引而不是指针。我认为这会起作用(它很容易编码),但我还没有测试过。

于 2012-06-20T22:33:39.637 回答
0

Java没有指针。但是可以说,当您创建一个 时Object,您正在创建一个指向该 的引用(指针)Object

例如:

Object obj = new Object();

所以引用obj实际上是指向Object你刚刚创建的新的。

现在,如果您想将指针的概念转换为指针,您可以简单地创建一个指向现有引用的引用。

Object obj = new Object();
Object obj2;
obj2 = obj;
于 2012-06-20T19:35:14.167 回答
0

唯一的“类指针”方法是 unsafe() 。您可以使用它分配内存。但是你不能走出 JVM 区域 :)

于 2012-06-20T20:47:28.267 回答