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 Python) 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 Python, 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