|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.10.2009, 14:45 | #11 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Я просто припоминаю, что давно как-то так делал: выделял одномерный массив x*y, а потом использовал указатель двумерного массива на том же куске памяти. Только, кажется, одна размерность была постоянной.
Вариант mYziK-а и правда понятнее. И еще в нем можно делать строки разной длины. А я выделяю x*y байт и работаю с ними как захочется - например, обращаясь к элементу a[i,j] так: a[i+j*x]. Можно наоборот: a[i*y+j] - главное сразу определиться и не путать. Если в программе много раз выделяется/освобождается память, то такой вариант предпочтительнее по скорости (оператор new относительно медленный). Последний раз редактировалось ds.Dante; 06.10.2009 в 18:24. |
06.10.2009, 17:52 | #12 |
Куды бечь?
Форумчанин
Регистрация: 05.10.2009
Сообщений: 104
|
Спасибо, постараюсь разобраться.
Ааа, все, понятно! У тебя какбы... псевдоматрица? Ну, на самом деле это одномерный массив.) Просто обращаешься ты к нему... хм, по хитрому =)
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
Последний раз редактировалось forsaken66; 06.10.2009 в 17:57. |
07.10.2009, 15:44 | #13 | ||
Пользователь
Регистрация: 18.09.2009
Сообщений: 38
|
Цитата:
Цитата:
Объяснение: динамический массив - это последовательный блок памяти: [int0][int1][int2][int3][int4]...[inti]... Имя массива - указатель на нулевой [int0], то, что пишешь в "[]" - это смещение относительно нулевого элемента, т.е. запись a[i] равносильна записи *(a+i) //Элемент по адресу a+i, т.е. [inti] Кстати по-этому можно писать i[a] =) т.к. это все равно *(i+a) Мой вариант матрицы: [int*0][int*1][int*2]....[int*i] т.е. массив указателей на другие массивы, которые так же последовательно расположенны в памяти(ток я не помню/не знаю, один за одним ли...): [int00][int01][int02]...[int0i].....[int10][int11][int12]...[int1i]... и т.д. ds.Dante Сразу выделяет блок памяти размером x*y, что будет равносильно одномерному массиву размером x*y, но его можно использовать и как двумерный массив (матрицу), просто обращаясь Код:
j*y - это на сколько ячеек (а блоки у нас по y - элементов, нужный блок - j) нужно сместиться от самого первого, чтобы попасть в j-ый столбец (или строку - смотря как интерпретировать x и y). так запись a2[i*x+j] - элемент в i-ой строке j-го столбца... З.Ы. Может немного напутал с столбец-строка, сори заранее, не спал ночь З.Ы.Ы. - Вечно забываю про вторую страницу - не увидел ваших постов А удалять уже жалко =) |
||
07.10.2009, 16:54 | #14 |
Куды бечь?
Форумчанин
Регистрация: 05.10.2009
Сообщений: 104
|
Спасибо, я всё понял.
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
|
15.10.2009, 23:17 | #15 |
Пользователь
Регистрация: 31.05.2009
Сообщений: 97
|
А у меня такой вопрос, если мне нужно будет определить и вывести на экран адрес элемента матрицы(многомерного динамического массива), то как мне это сделать??
спят подружки вредные безмятежным сном,
Снятся мышкам хлебные крошки под столом, Буратинам - досточки, кошкам - караси, Всем собакам - косточки, программистам - Си (с) |
15.10.2009, 23:36 | #16 |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
Arcueid1691
Код:
Росли вроде умными, выросли дурнями... (c)А.Васильев
|
15.10.2009, 23:44 | #17 |
Пользователь
Регистрация: 31.05.2009
Сообщений: 97
|
в этом случае получаем адрес элемента, так?
спят подружки вредные безмятежным сном,
Снятся мышкам хлебные крошки под столом, Буратинам - досточки, кошкам - караси, Всем собакам - косточки, программистам - Си (с) |
16.10.2009, 00:09 | #18 |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
АгаНу написал же, зачем ещё спрашивать. А на меня форум бухтит, что сообщение короткое
Росли вроде умными, выросли дурнями... (c)А.Васильев
|
16.10.2009, 00:11 | #19 |
Пользователь
Регистрация: 31.05.2009
Сообщений: 97
|
а возможно ли получить индекс элемента матрицы? Т.е. а[i][j]
спят подружки вредные безмятежным сном,
Снятся мышкам хлебные крошки под столом, Буратинам - досточки, кошкам - караси, Всем собакам - косточки, программистам - Си (с) |
16.10.2009, 00:17 | #20 |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
Если массив объявлен как int a[M][N], то можно, используя, что в этом случае все элементы будут располагаться подряд, сначала N элементов 1ой строки, потом N элементов 2ой строки и т.д. А вот если объявлять как int **a, и дальше выделять память, то нельзя.
Росли вроде умными, выросли дурнями... (c)А.Васильев
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент | LyaLya | Помощь студентам | 15 | 20.12.2009 14:12 |
Вопрос про массивы и модули ? | juan666777 | Общие вопросы Delphi | 6 | 21.07.2009 22:43 |
Stringgrid, cells[m,n] и двумерные массивы.(#002) Очередной вопрос начинающего. | Albert2008 | Компоненты Delphi | 4 | 28.07.2008 19:02 |
Вопрос массивы и циклы | probmat | Помощь студентам | 7 | 16.03.2008 13:35 |