![]() |
|
Модераторы: Poseidon |
![]()
|
|
| scai |
|
|||
![]() Неофит ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.1.2007 Где: г. Загорск Репутация: 2 Всего: 2 |
Нужно реализовать представление матриц как массив указателей на массивы(чтоб строчки можно было двигать).
Если размер фиксированный - то понятно... более менее... Подскажите, как описать эти массивы, чтобы размерность можно было задавать в рантайме, и как прописать для них typedef, а то я замучался уже по литературе лазить. p.s. vector не предлагать))) --------------------
|
|||
|
||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 10 Всего: 23 |
С динамическими массивами не поможет typedef -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 21 Всего: 92 |
это? |
|||
|
||||
| scai |
|
||||
![]() Неофит ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.1.2007 Где: г. Загорск Репутация: 2 Всего: 2 |
ага. похоже.
таак. угу. а что значит
? первые квадратные скобки? значит перемещение строк -
... и как звездочки расставить чтоб, обратиться непосредственно к значению элемента? к указателю на него? а первый typedef -, просто, для концептуальной полноты? а не много ли вопросов? --------------------
|
||||
|
|||||
| zkv |
|
||||||||||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 21 Всего: 92 |
есть оператор delete, а есть delete[]. Первый удаляет единичный элемент, а второй массив. (грубо говоря) логически было бы вернее расставить пробелы так:
верно: только нужно понимать, что фактически нет никакого перемещения, производится только перенацеливание указателей. matrix[j] - как раз указатель на вектор (одномерный массив) элементов.
следущие строки эквивалентны:
следущие строки эквивалентны:
да, matrix можно было объявить вообще просто так:
ну и дальше:
и т.д. у меня спрашиваешь? Это сообщение отредактировал(а) zkv - 8.9.2007, 15:02 |
||||||||||||
|
|||||||||||||
| scai |
|
||||
![]() Неофит ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.1.2007 Где: г. Загорск Репутация: 2 Всего: 2 |
zkv, здорово!
Да. Имя массива как указатель на первый элемент. обьясни, пожалуйста, что тут происходит, на пальцах.
matrix как указатель на указатель в первой строке, а затем выделение памяти под массив указателей. так? а потом
? [upd] и еще. (извини, если надоедает, плохо в указателях понимаю), matrix[i][j] - у нас массив указателей... без разыменования обращаемся? то есть, если обьявлен указатель и направлен на массив в динамической памяти, то можно использовать такойже синтаксис как для работы со статическим массивом? так? Это сообщение отредактировал(а) scai - 8.9.2007, 18:41 --------------------
|
||||
|
|||||
| zkv |
|
||||||||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 21 Всего: 92 |
у нас здесь как раз таки не массив, а указатель, разница между ними есть, если интересно, поищи в Общих вопросах, войны даже были помню, по этому вопросу. ну здесь мы заводим ячейку памяти, и говорим, что в ней будет хранится адрес ячейки, в которой хранится адрес ячейки, в которой храниться переменная типа float а тут мы требуем выделить нам памяти под массив из nRows элементов типа float * (то есть ячеек, где будут лежать адреса переменных типа float), и записать адрес первого элемента массива в переменную matrix. а тут неправильно, нужно:
здесь мы требуем выделить нам памяти под массив из nCols элементов типа float (то есть элементы матрицы i-й строки ), и записать адрес первого элемента массива в i-ю ячейку массива, на который указывает matrix.
так это и есть разыменование, для: int *pInt = new int[10]; записи:
и
да только нужно не забывать, что размеры динамического массива определяются в рантайме, поэтому, к примеру, оператор sizeof() будет работать не корректно, так как он выполняется на этапе компиляции. |
||||||||||
|
|||||||||||
| scai |
|
|||
![]() Неофит ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.1.2007 Где: г. Загорск Репутация: 2 Всего: 2 |
zkv, спасибо за исчерпывающий ответ! Оч. помог! А то после паскаля с сишным синтаксисом не так просто разобраться... Спасибо!
--------------------
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 21 Всего: 92 |
||||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |