Здравствуйте, Аноним, Вы писали:
А>Наверное, лет пять не работал с многомерными массивами. Вот теперь приспичило и на тебе... Подскажите, люди добрые, как это правильно делается?
Если размерность N задана на перед то все просто! //только если N большое не красиво
int *** pf;
...
int func( int *** a );
Если N меняеться тогда я вижу только один выход — создать некую оболочку для массива.
Например такую
struct Array {
int dim;
int * arr;
};
и пару методов к нему...
воть, только сильно не пинайте — может я чего не понял.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>А ежели объявить так: А>>
void test(int **pM)
?
А>А как тогда всунуть в функцию массив?
А>
test(matrix); // error C2664
А>не срабатывает...
А>
error C2664: 'test' : cannot convert parameter 1 from 'int [2][2]' to 'int ** '
А>Безумные комбинации, вроде test(&matrix), test(&matrix[0][0]), test(&&matrix) и т.п., тоже ни к чему хорошему не приводят. Так как же быть?
Для того что бы у массива поиметь доступ к элументу нужно что бы компилятор знал один размер этого двухмерного массива, т.к. расчет ячейки памяти происходит по формуле ptr = row * sizeRow + col
Здравствуйте, zubr, Вы писали:
Z>Здравствуйте, Аноним, Вы писали:
А>>Наверное, лет пять не работал с многомерными массивами. Вот теперь приспичило и на тебе... Подскажите, люди добрые, как это правильно делается?
Z>Если размерность N задана на перед то все просто! //только если N большое не красиво Z>
Z>int *** pf;
Z>...
Z>int func( int *** a );
Z>
Если размерность задана на перед, то не лучше ли создать массив одним куском в памяти?
А то тебе придется много раз вызывать new/delete, а это не хорошо.
Z>Если N меняеться тогда я вижу только один выход — создать некую оболочку для массива. Z>Например такую
Z>
Z>struct Array {
Z>int dim;
Z>int * arr;
Z>};
Z>
Z>и пару методов к нему...
Z>воть, только сильно не пинайте — может я чего не понял.
А вот тут лажа, ну будуешь ты знать что Н = 3, и что тебе это даст, как ты будешь обращаться к элементам массива то?
Тебе надо еще знать и размерность по каждому направлению(хотя для минимума на одно можно сократить)
Re[4]: Как передать N-мерный массив в функцию?
От:
Аноним
Дата:
23.06.04 05:59
Оценка:
Здравствуйте, Denwer, Вы писали:
D>Для того что бы у массива поиметь доступ к элументу нужно что бы компилятор знал один размер этого двухмерного массива, т.к. расчет ячейки памяти происходит по формуле ptr = row * sizeRow + col
D>вот пример
D>
Здравствуйте, Denwer, Вы писали:
D>Если размерность задана на перед, то не лучше ли создать массив одним куском в памяти? D>А то тебе придется много раз вызывать new/delete, а это не хорошо.
int * pf;
...
int func( int *a );
ну а так?
struct Array {
int dim;
int * dim_size;//храним ширину по данной размерностиint * arr;
};
D>А вот тут лажа, ну будуешь ты знать что Н = 3, и что тебе это даст, как ты будешь обращаться к элементам массива то? D>Тебе надо еще знать и размерность по каждому направлению(хотя для минимума на одно можно сократить)
в новом свете пойдет?
И если пойдет то можно в принципе оба случая объединить?
Здравствуйте, zubr, Вы писали:
Z>Здравствуйте, Аноним, Вы писали:
А>>Наверное, лет пять не работал с многомерными массивами. Вот теперь приспичило и на тебе... Подскажите, люди добрые, как это правильно делается?
Z>Если размерность N задана на перед то все просто! //только если N большое не красиво Z>
Z>int *** pf;
Z>...
Z>int func( int *** a );
Z>
Соврешенно бесполезно. Массивы размерности более единицы к многоуровневому указателю привести нельзя.
Здравствуйте, Аноним, Вы писали:
А>Наверное, лет пять не работал с многомерными массивами. Вот теперь приспичило и на тебе... Подскажите, люди добрые, как это правильно делается?