What does it mean when an object has two asterisks at the beginning?
**variable
What does it mean when an object has two asterisks at the beginning?
**variable
 
    
     
    
    In a declaration, it means it's a pointer to a pointer:
int **x;  // declare x as a pointer to a pointer to an int
When using it, it deferences it twice:
int x = 1;
int *y = &x;  // declare y as a pointer to x
int **z = &y;  // declare z as a pointer to y
**z = 2;  // sets the thing pointed to (the thing pointed to by z) to 2
          // i.e., sets x to 2
 
    
    It is pointer to pointer.
For more details you can check: Pointer to pointer
It can be good, for example, for dynamically allocating multidimensional arrays:
Like:
#include <stdlib.h>
int **array;
array = malloc(nrows * sizeof(int *));
if(array == NULL)
{
    fprintf(stderr, "out of memory\n");
    exit or return
}
for(i = 0; i < nrows; i++)
{
    array[i] = malloc(ncolumns * sizeof(int));
    if(array[i] == NULL)
    {
        fprintf(stderr, "out of memory\n");
        exit or return
    }
}
 
    
     
    
    Pointer to a pointer when declaring the variable.
Double pointer de-reference when used outside the declaration.
 
    
    You can use cdecl to explain C-types.
There's an online interface here: http://cdecl.org/. Enter "int **x" into the text field and check the result.
 
    
    **variable is double dereference. If variable is an address of an address, the resulting expression will be the lvalue at the address stored in *variable.
It can mean different things if it's a part of declaration:
type **variable would mean, on the other hand, a pointer to a pointer, that is, a variable that can hold address of another variable, which is also a pointer, but this time to a variable of type 'type'
 
    
    It means that the variable is dereferenced twice. Assume you have a pointer to a pointer to char like this:
char** variable = ...;
If you want to access the value this pointer is pointing to, you have to dereference it twice:
**variable
 
    
    It is a pointer to a pointer. You can use this if you want to point to an array, or a const char * (string). Also, in Objective-C with Cocoa this is often used to point to an NSError*.
Pointer to another pointer
 
    
    ** is a pointer to a pointer. These are sometimes used for arrays of strings.
 
    
    It's a pointer to pointer.
As in if *x means that it will contain an address of some variable then if i say
m=&x then m is shown as
int **m
 
    
    