Вот код, который печатает адрес первого элемента 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