Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ к элементам двумерного массива.  (Прочитано 7550 раз)
0 Пользователей и 1 Гость смотрят эту тему.
lightmaker
Участник

ru
Offline Offline

« : 04-08-2008 09:11 » 

Корректно ли работать с двумерным массивом как одномерным, пользуясь только вторым индексом:

arr[10][10];

cout  << arr[0][35]; или cout  << *(*arr+i);

Проверял, все работает.  То есть, всегда ли строки располагаются в памяти строго друг за другом??? По логике все так, просто хочу удостовериться))
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 04-08-2008 10:01 » 

Можно.
Двухмерный массив N*M представляет из себя N одномерных массивов размером M. Ничего не мешает работать с каждым одномерным массивом отдельно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
lightmaker
Участник

ru
Offline Offline

« Ответ #2 : 04-08-2008 10:04 » 

Ок, Thanks)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 04-08-2008 10:53 » 

lightmaker, даже в некоторых случаях, быстрее
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #4 : 04-08-2008 12:46 » 

Sla, а почему в некоторых? Я считал, что всегда быстрее.
Записан

С уважением Lapulya
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 06-08-2008 02:51 » 

быстрее - вряд ли Улыбаюсь Нет ничего быстрее, чем сканирование массива одним указателем. А через неконстантные индексы - оно всегда будет медленнее (но это всё малозаметно в любом случае, больше относится к удобству пользования, чем к скорости)
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #6 : 06-08-2008 15:02 » 

Алексей1153++, не понял, он и есть один...

Вопрос вот в чем, что быстрее и когда?

это

int a[2][2];
int b = a[1][1];

или это

int a[2][2];
int b = a[3];
Записан

С уважением Lapulya
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 06-08-2008 16:14 » 

эти два примера по скорости одинаковы (только на второй компилятор вроде должен заругаться) , я говорю про переменные в качестве индексов Улыбаюсь
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #8 : 08-08-2008 15:02 » 

Алексей1153++, не... ругаться не должен (с чего бы???), а вот по поводу скорости, я всегда считал что второй вариант быстрее (вроде тут только один сдвиг от начала массива, а в первом 2 сдвига), ясное дело если индексы определяются в рантайме, в статике компилятор может их вообще одинаково представляет. Не исключаю что в первом варианте в рантайме вычисляется смещение а потом выполняется тоже самое что и во втором вариаете, надо ассемблер смотреть (понятно, что и это тоже субъективно)
Записан

С уважением Lapulya
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 08-08-2008 15:28 » 

lapulya, так я про то и говорю Улыбаюсь Твои два примера - с цифрами. Компилятор уже сразу знает адрес, поэтому будет одинаковая скорость. А если бы ты написал

int a[2][2];

int a[ x ][ y ];

это было бы различно по скорости
Записан

lightmaker
Участник

ru
Offline Offline

« Ответ #10 : 10-08-2008 14:25 » 

....
int a[2][2];
int b = a[3];

Компилятор на это ругаться будет точно!! Тк это попытка присвоить значение указателя переменной.
Код:
arr[i][j] ~ *(*(arr+i)+j)
По первому индексу происходит сдвиг по строкам.
Надо было так:

Код:
int a[2][2];
int b = a[0][3];


« Последнее редактирование: 10-08-2008 14:54 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines