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.
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
They are used in C (and when using C programming approaches in C++) in two common situations: one, to refer to dynamically-allocated arrays of pointers, as in int** p = newint*[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( constchar *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 C++, where we have vectors and references.
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