указатель - это, по сути, переменная, которая содержит адрес памяти объекта.Тип объекта в вашем случае 'int'.
memory:
00000000: [some value] -- start
...
pointer : [address1] pointer to int (int*) +
... |
address1: [value of int] <-----------------+
теперь у вас есть int**
, который является указателем на указатель на int.
memory:
00000000: [some value] -- start
...
pointer : [address1] pointer to int (int**) ----+
... |
address1 : [address2] pointer to int (int*) + <-+
... |
address2: [value of int] <------------------+
Теперь, чтовы сделали, вы присвоили массив указателей на int размером строки
memory:
00000000: [some value] -- start
...
pointer : [address1] pointer to int (int**) -----+
... |
address1 : [address-a] pointer to int (int*) + <-+
address2 : [address-b] pointer to int (int*)
address3 : [address-c] pointer to int (int*)
address4 : [address-d] pointer to int (int*)
address5 : [address-e] pointer to int (int*) +
... |
address-e: [value of int] <------------------+
...
address-b:...
надеюсь, это помогло