Путаница в типах данных в 2D-массиве

Вот код, который печатает адрес первого элемента 2D-массива с последующим добавлением 1. Хотя все 4 базовых адреса одинаковы, но их добавление с 1, очевидно, не дает того же результата из-за их различий " типы ". Я могу определить тип некоторых (если они верны), но не для всех.

int main()
{
    int array[4][3];
    printf("array %u\n",array);   //of type int(*)[3]
    printf("array+1 %u\n",array+1);
    printf("&array %u\n",&array);   //....???
    printf("&array+1 %u\n",&array+1);
    printf("array[0] %u\n",array[0]);    //of type int*
    printf("array[0]+1 %u\n",array[0]+1);
    printf("&array[0] %u\n",&array[0]); //....???
    printf("&array[0]+1 %u\n",&array[0]+1);
} 

Не могли бы вы подробно объяснить «тип» каждого базового адреса, чтобы понять арифметику указателей после добавления 1. Пример вывода для машины gcc приведен ниже для быстрого ознакомления.

array       3214383040 
array+1     3214383052 
&array      3214383040 
&array+1    3214383088 
array[0]    3214383040 
array[0]+1  3214383044 
&array[0]   3214383040 
&array[0]+1 3214383052 
6
задан Terminal 3 March 2011 в 13:49
поделиться