Указатель на двухмерный массив - C (СИ)
Формулировка задачи:
Всем привет, вот случайно наткнулся на тему указателей и возникла проблема с пониманием.
Объясню:
допустим имеем массив и указатель на него Известно что i == &i[0] и можно бегать по его значениям через адрес:
Но тогда возникает вопрос:
Допустим имеем двухмерный массив Также нам известно, что t == &t[0][0](так в книге написано у Герберта шилдта), но тогда почему правила "бегания" по двухмерному массиву немного отличаются от обычного массива?
Да и просто указателю p нельзя приравнять t.
Но я не понимаю, зачем тут (int *), если вроде двухмерный массив также последовательно размещается в памяти, то адрес t это его начальный байт, то есть байт с которого начинается t[0][0], почему нельзя без (int *) обойтись? Объясните пожалуйста что к чему?
int i[90], *ptr;
ptr = i; *(ptr+N)
int t[10][10];
int t[10][10], *p; p = (int *)t; *((int *)p+N) // Вот такая так сказать формула
Я имел ввиду, если не ссылаться указателем на двухмерный массив, а просто по его имени нельзя без (int *) вот так *((int *)t+N) и присвоить его адрес без (int *) не получается, кроме как напрямую &t[0][0];
Решение задачи: «Указатель на двухмерный массив»
textual
Листинг программы
int t[10][10]; int (*p)[10] = t;
Объяснение кода листинга программы
- Объявляется целочисленный двухмерный массив
t
размером 10x10. - Указатель
p
типаint (*)[10]
указывает на первый элемент массиваt
. - Значение указателя
p
присваивается адресу первого элемента массиваt
. - В данном случае, адрес первого элемента массива
t
равен адресу массиваt
. - Указатель
p
может использоваться как массив 10-го размера, т.е.p[i][j]
обращается к элементуt[i][j]
.