По идее должно работать так:
Код: Выделить всё
long a[4][4];
long** p;
p=a;// так не компилируется
p=(long **)a; //так компилируется
long t;
t = p[2][2]; // тут вместо значения a[2][2] хранится некий хлам, но не значение
Код: Выделить всё
long a[4][4];
long** p;
p=a;// так не компилируется
p=(long **)a; //так компилируется
long t;
t = p[2][2]; // тут вместо значения a[2][2] хранится некий хлам, но не значение
Код: Выделить всё
long *a[4][4];
long t;
t=*a[2][2];
Код: Выделить всё
long a[10][10];
long *ptr = a; // вот вам указатель на массивИ правильно он отмораживает!BCluster писал(а):ARV, так я конечно пробовал, но кодвижн отмораживает:
A value of type long[4][20] can't be used to initialize an entity of type 'long *'
С одномерным массивом так проходит, с двумерным почему то нет
adrenocrome, тут можно успешно убрать зведдочку и будет работать))
мне нужн указатель, ибо у меня много массивов, и я хочу сделать массив указателей для их непосредственной адресации
Код: Выделить всё
long *ptr = (void*)a;в каком это месте? элемент массива обозначается а[1][1], а просто а - указатель.adrenocrome писал(а):И правильно он отмораживает!
Пытаемся указателю присвоить значение массива.
погодите, вам указатель на массив или указатель на указатель на массив? обратил внимание, что в первом посте у вас long **p определен...BCluster писал(а):По непроверенной информации кодвижн не поддерживает указатели на указатели
хрен там! двумерный массив - это простой одномерный массив, в котором после первой строки следует вторая, потом третья и т.д. на счет того, строка там или столбец - не уверен, но суть такая: просто идущие подряд числа, никаких указателей!BCluster писал(а):Указатель на двумерный массив можно предстваить массив указателей на строки массива.
Указатели на многомерные массивы в языке СИ - это массивы массивов, т.е. такие массивы, элементами которых являются массивы. При объявлении таких массивов в памяти компьютера создается несколько различных объектов. Например при выполнении объявления двумерного массива int arr2[4][3] в памяти выделяется участок для хранения значения переменной arr, которая является указателем на массив из четырех указателей. Для этого массива из четырех указателей тоже выделяется память. Каждый из этих четырех указателей содержит адрес массива из трех элементов типа int, и, следовательно, в памяти компьютера выделяется четыре участка для хранения четырех массивов чисел типа int, каждый из которых состоит из трех элементов.
Была похожая задачка.BCluster писал(а):Как еще можно адресовать кучу массивов, без switch..case?)
Почему непроверенная? При попытке передать в функцию указатель на строку двумерного массива, при компиляции, он мне так прямым текстом и написал в ерроре (вольный перевод):BCluster писал(а):По непроверенной информации кодвижн не поддерживает указатели на указатели, отсюда и ноги по ходу.
Версия 1.25.5 компилятора CVAVR не поддерживает использование указателя на указатель