Q:

Address of the pointer in C++

I am trying to understand pointers and I can't get one thing.
For instance,
//part of code

int *p;
int tab[3];

so now we have variable tab that contains address of first element of the array. And I want to create a pointer that points on that pointer. 
So, I would do this like this way:
p=&tab;

If it would work, p would be the address of tab (that means it would point to tab)
Unfortunately it doesn't work. So how to get to address of the pointer itself?
what is the correct type for address? (addresstype *p) I want to point of the memory block which contains address of first element of tab, not on tab itself. 

A:

so now we variable tab that contains address of first element of the array.

No, we have a variable tab which is an array.

And I want to create a pointer that points on this pointer.

If you want a pointer to the first element of the array, then that's easy: an array is implicitly convertible to that pointer (which is what leads to the widespread, but incorrect belief that an array is a pointer).
int * p = tab;

If you want a pointer to the array, rather than the first element, then that's a different type:
int (*p)[3] = &tab;

But you wouldn't usually want anything like that.

So how to get to address of pointer itself?

There is no pointer, so there's no way to get that address. If you did have a pointer, then you could take the address of that, just like any other object:
int * p = arr;   // Pointer to first element of array
int ** pp = &p;  // Pointer to pointer

I want to point of the memory block which contains address of first element of tab, not on tab itself.

That makes no sense; tab is the memory block containing its elements.

A:

Remember that arrays decays to a pointer to the first element. So whenever you need a pointer to an array, just use the array as it is. Like
p = tab;

