Batdude
Batdude

Reputation: 556

C++ Pointers to Pointers in Java

I am a Java noob. I have been able to grasp the concept of converting C/C++ pointers into Java references and this has gone fairly smoothly.

I hit a piece of code that has pointers to pointers (ie **ptr). I need to dereference the pointer and change the value of the pointer it is pointing to (ie *ptr = &newthing;)

This seems alot tougher in java. Does anyone have any ideas on how to solve this issue? Quick google search turned up nothing.

Here's a code example in C++. I want to get something similar working in java but the ptr_to_ptr variable is a problem:

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?

Upvotes: 9

Views: 3017

Answers (5)

Batdude
Batdude

Reputation: 556

I'll answer my own question. I could not find any easy way to do a pointer to a pointer (reference to a reference) in java. So I refactored the code to use arrays of references, and array indices instead of pointers. I think this will work (it coded easily) but I have not tested it yet.

Upvotes: 3

huseyin tugrul buyukisik
huseyin tugrul buyukisik

Reputation: 11920

The only "pointer-like" method is unsafe() . You can allocate memory with it. But you cannot go outside the JVM area :)

Upvotes: 0

TeaOverflow
TeaOverflow

Reputation: 2578

Well pointer to pointer is not directly mappable in Java. I assume you want to assign a new object to a pointer inside a function.

As far as I know you can only solve this by using a wrapper object that acts as a reference, so you can modify the real reference inside:

class ObjRef {

   public RealObj obj;

}

void modifyRef(ObjRef ref){

   ref.obj = new RealObj()

}

Hope this helps

Upvotes: 4

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726579

A typical trick one could use to model pointers to pointers in Java is using arrays: a reference to the array itself serves as the "pointer", while the array element serves as the item pointed to. You can nest these as much as you'd like, but the code does not look nearly as nice as it does in C/C++.

Rather than porting C/C++ idioms into Java, you should build a mutable class that lets you change the item inside it. This class would serve as a "pointer" to give you the functionality that you are looking for, and it would also add readability to your Java code. Generics greatly simplify your task, requiring only one implementation that you could reuse.

Upvotes: 15

Kazekage Gaara
Kazekage Gaara

Reputation: 15052

Java doesn't have pointers. But one can say that when you create an Object, you are creating a reference(pointer) to that Object.

For example:

Object obj = new Object();

So the reference obj is actually pointing to the new Object you just created.

Now, if you want to translate the concept of pointer to a pointer, you could simply create a reference that would point to an existing reference.

Object obj = new Object();
Object obj2;
obj2 = obj;

Upvotes: 0

Related Questions