A pointer is used to
point to a memory cell instead of creating a new variable at a new memory cell. This means that the pointer is always the value of whatever the memory cell's value is.
Now, each memory cell of our computer has it's own address, like your street or an estate for example. Now when you use & it gets the address of the variable instead of the value.
Try doing this for example:
Code:
foo = 5;
std::cout << &foo << std::endl;
std::cout << foo << std::endl;
You'll see that the first result is a series of numbers and letters, whereas the second result is 5.
Now for the array bit. When you pass an array to a function it doesn't take the value of the array, but points to the addresses of the memory cells that the array's data is stored in. So to answer your first question. char** name is pointing to a multidimensional array (double array as you called it), so it's a pointer.
Hope this helped

I'm no Bench, but I tried my best
