C ++指针指向Java
我是一个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?
可以用来模拟Java指针指针的典型技巧是使用数组:对数组本身的引用用作“指针”,而数组元素用作指向的项。 您可以根据需要嵌套这些,但代码看起来并不像在C / C ++中那样好。
您应该构建一个可变类,以便更改其中的项目,而不是将C / C ++惯用语移植到Java中。 这个类可以作为一个“指针”来提供您正在寻找的function,它还可以为您的Java代码增加可读性。 generics大大简化了您的任务,只需要一个可以重用的实现。
指向指针的指针在Java中不能直接映射。 我假设您要将新对象分配给函数内的指针。
据我所知,你只能通过使用一个作为参考的包装器对象来解决这个问题,所以你可以修改里面的实际引用:
class ObjRef { public RealObj obj; } void modifyRef(ObjRef ref){ ref.obj = new RealObj() }
希望这可以帮助
我会回答我自己的问题。 我找不到任何简单的方法来指向java中的指针(引用引用)。 所以我重构了代码以使用引用数组和数组索引而不是指针。 我认为这将有效(它编码很容易),但我还没有测试过。
Java没有指针。 但是可以说,在创建Object
,您正在创建该Object
的引用(指针)。
例如:
Object obj = new Object();
因此,引用obj
实际上指向刚刚创建的新Object
。
现在,如果要将指针的概念转换为指针,您可以简单地创建一个指向现有引用的引用。
Object obj = new Object(); Object obj2; obj2 = obj;
唯一的“指针式”方法是不安全的()。 你可以用它分配内存。 但你不能走出JVM区域:)