Разница между массивом [0] [1] и массивом [0] [0] составляет один элемент массива. Размер разницы не зависит от размера элемента массива. Таким образом, для массива, содержащего char, разница будет равна 1, а для массива, содержащего long, это будет 8 на 64-битной машине.
Разница между массивом [1] [0] и массивом [0] [0] состоит в том, что многие элементы массива находятся в строке (для массива 1000 x 1000 это будет 1000 элементов массива). Размер разницы - это любой размер элемента массива, умноженный на количество элементов массива в строке. Таким образом, для массива 1000 x 1000, содержащего char, разница будет равна 1 x 1000, а для массива того же размера, содержащего long, он будет 8 x 1000 на 64-битной машине.
Вот пример программы, которая использует массивы 10 x 10:
#include <stdio.h>
int main()
{
#define ARRAY_WIDTH 10
#define ARRAY_HEIGHT 10
char CArray[ARRAY_HEIGHT][ARRAY_WIDTH];
short SArray[ARRAY_HEIGHT][ARRAY_WIDTH];
long LArray[ARRAY_HEIGHT][ARRAY_WIDTH];
printf("&CArray[0][1] - &CArray[0][0] = %ld (%p-%p) sizeof(char) = %lu\n",
(long)(&CArray[0][1]) - (long)(&CArray[0][0]), &CArray[0][1], &CArray[0][0], sizeof(char));
printf("&SArray[0][1] - &SArray[0][0] = %ld (%p-%p) sizeof(short) = %lu\n",
(long)(&SArray[0][1]) - (long)(&SArray[0][0]), &SArray[0][1], &SArray[0][0], sizeof(short));
printf("&LArray[0][1] - &LArray[0][0] = %ld (%p-%p) sizeof(long) = %lu\n",
(long)(&LArray[0][1]) - (long)(&LArray[0][0]), &LArray[0][1], &LArray[0][0], sizeof(long));
printf("&CArray[1][0] - &CArray[0][0] = %ld (%p-%p) sizeof(char) * ARRAY_WIDTH = %lu\n",
(long)(&CArray[1][0]) - (long)(&CArray[0][0]), &CArray[1][0], &CArray[0][0], sizeof(char) * ARRAY_WIDTH);
printf("&SArray[1][0] - &SArray[0][0] = %ld (%p-%p) sizeof(short) * ARRAY_WIDTH = %lu\n",
(long)(&SArray[1][0]) - (long)(&SArray[0][0]), &SArray[1][0], &SArray[0][0], sizeof(short) * ARRAY_WIDTH);
printf("&LArray[1][0] - &LArray[0][0] = %ld (%p-%p) sizeof(long) * ARRAY_WIDTH = %lu\n",
(long)(&LArray[1][0]) - (long)(&LArray[0][0]), &LArray[1][0], &LArray[0][0], sizeof(long) * ARRAY_WIDTH);
return 0;
}
Эта программа выдает следующий вывод (помните, что мои массивы только 10 x 10):
&CArray[0][1] - &CArray[0][0] = 1 (0x7ffcff4045e1-0x7ffcff4045e0) sizeof(char) = 1
&SArray[0][1] - &SArray[0][0] = 2 (0x7ffcff404652-0x7ffcff404650) sizeof(short) = 2
&LArray[0][1] - &LArray[0][0] = 8 (0x7ffcff404728-0x7ffcff404720) sizeof(long) = 8
&CArray[1][0] - &CArray[0][0] = 10 (0x7ffcff4045ea-0x7ffcff4045e0) sizeof(char) * ARRAY_WIDTH = 10
&SArray[1][0] - &SArray[0][0] = 20 (0x7ffcff404664-0x7ffcff404650) sizeof(short) * ARRAY_WIDTH = 20
&LArray[1][0] - &LArray[0][0] = 80 (0x7ffcff404770-0x7ffcff404720) sizeof(long) * ARRAY_WIDTH = 80
Посмотрите здесь: https://onlinegdb.com/BJwpNDBYB