pointer to a pointer

Dec 21, 2012 at 10:06pm
I understand basic pointers but im having trouble with pointers that are written like this int **test. so its basically a pointer to a pointer? can someone give me an example how it might be useful to do such a thing or when it would be commonly used and possibly how i would get its value.
Dec 21, 2012 at 10:14pm
If you need to point at something, but it's already a pointer. For now, I'd just say understand what it's doing. Once you start getting into any API you'll start seeing them often enough
Dec 21, 2012 at 10:16pm
They are used in C (and when using C programming approaches in Python) in two common situations: one, to refer to dynamically-allocated arrays of pointers, as in
int** p = new int*[10];

and two, as an "out" parameter to a C function that modify pointers "by reference", in addition to returning some value

For example, the strtod(), strtol() and friends all take a char** parameter:

long strtol( const char *str, char **str_end, int base );

which you can call as

1
2
3
char str[] = "123 test";
char* end;
long n = strtol(str, &end, 10);


this function will change your end to point to the first non-converted character in the string held by str, in addition to returning the result of the conversion directly.

This kind of stuff is not useful in Python, where we have vectors and references.
Last edited on Dec 21, 2012 at 10:32pm
Dec 21, 2012 at 10:27pm
Dec 22, 2012 at 12:43am
It's very simple.
Sometimes, you may want to pass a pointer to a pointer. Pointers themselves are data and therefore take up space. The address of a pointer can be assigned to a pointer (to a pointer to data). Don't let the indirection fool you- it works the same way. You can dereference it and retrieve that pointer, and derefrence that too, to retrieve the data.
An array of pointers works in a similar way. With pointers, you usually want to read right-to-left.

1
2
3
4
5
int i; //i is an integer
int *ptr= &i; //address of i assigned to a pointer to an integer
int **pptr= &ptr; //address of ptr is assigned to a pointer to (a pointer to an integer).
**pptr=0; //i is zero
*pptr=0; //ptr is now NULL 
Topic archived. No new replies allowed.