Ниже представлены два 2D-массива, один из которых объявлен с использованием нотации массива, а другой - с использованием нотации указателя (т.е. указатель на группу смежных одномерных массивов (не массив указателей).
int array1[][3]={{1,2,3},{4,5,6}};
int (*array2)[3]={{1,2,3},{4,5,6}};
Я могу получить доступ к элементам array1, используя как массив, так и указатель.
//accessing the 3rd element of the first row (of array1)
printf("array1[0][2]=%d",array1[0][2]);//3
printf("\n*(*array1+2)=%d",*(*array1+2));//3
Однако, когда я пытаюсь получить доступ к тому же для array2, возникает ошибка времени выполнения.
//accessing the 3rd element of the first row (of array2)
printf("\n*(*array2+2)=%d",*(*array2+2));
printf("\narray2[0][2]=%d",array2[0][2]);
Что-то не так в том, как я объявил эти массивы? Я также пробовал объявить array2 как stati c, но он по-прежнему генерирует ошибку.
Почему эта ошибка возникает при объявлении с использованием обозначения указателя? Как мне это исправить?
Однако ошибки нет, если последние 2 строки заменить следующим образом:
printf("\n(*array2+2)=%d",(*array2+2));//9
printf("\narray2[2]=%d",array2[2]);//25
Но что это значит? Если я дам array2[3]
, то значение увеличится на 4 (размер int)