Вы объявляете переменную указателя, поэтому вы выделяете достаточно места для одного адреса памяти (зависит от вашей платформы / компилятора / и т. Д.)
Система типов гарантирует, что единственные адреса, которые вы назначаете для нее, содержат другие адреса памяти, и что эти адреса представляют фактический адрес целочисленной переменной.
Чтобы использовать указатель на указатель, вы разыменовываете его один раз (чтобы получить адрес, который фактически указывает на целое число), а затем второй раз (чтобы получить действительное целое число).
Вы можете обойти систему типов, явно приведя к чему-то другому (например, i = & pDouble), но это не рекомендуется, если вы не уверены, что знаете, что делаете.
Если у вас есть двумерный массив, вы можете представить его концептуально как один одномерный массив одномерных массивов, представляющих строки. Первым уровнем косвенности будет выбор строки, а другим - ячейка в строке.