Форум программистов, компьютерный форум CyberForum.ru

Многомерный массив и массив массивов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 09:24     Многомерный массив и массив массивов #1
На паскале это синонимы. Например, всё валидно:
Pascal
1
2
3
4
5
6
7
var a:array[1..n]of array[1..n]of array[1..n] of real; {объявлен одномерный массив одномерных массивов одномерных массивов реалов}
begin
        a[1,2][3]:=2; {А обращаемся к нему как к двумерному массиву одномерных массивов реалов}
        a[1][2,3]:=2; {А здесь как к одномерном массиву двумерных массивов реалов}
        a[3,4]:=a[5,5]; {И здесь как к двумерному массиву одномерных массивов реалов}
        a[1]:=a[8]; {И здесь как к одномерном массиву двумерных массивов реалов}
        a[1,2,3]:=2; {А здесь как к трёхмерному реалов}
,
Pascal
1
2
3
4
5
6
var a:array[1..n]of array[1..n,1..n] of real; {Объявлен одномерный массив двумерных массивов реалов}
begin
        a[1,2][3]:=2; {А обращаемся к нему как к двумерному массиву одномерных массивов реалов}
        a[1]:=a[8]; {И здесь как к одномерном массиву двумерных массивов реалов}
        a[1,2,3]:=2; {А здесь как к трёхмерному реалов}
        a[6][8][4]:=2; {А здесь как к одномерному массиву одномерных массивов одномерных массивов реалов}
Pascal
1
2
3
4
5
6
var a:array[1..n]of array[1..n]of array[1..n] of real; {Объявлен одномерный массив двумерных массивов реалов}
begin
        a[1,2][3]:=2; {А обращаемся к нему как к двумерному массиву одномерных массивов реалов}
        a[1]:=a[8]; {И здесь как к одномерном массиву двумерных массивов реалов}
        a[1,2,3]:=2; {А здесь как к трёхмерному реалов}
        a[6][8][4]:=2; {А здесь как к одномерному массиву одномерных массивов одномерных массивов реалов}
,
Pascal
1
2
3
4
5
var a:array[1..n,1..n]of array[1..n] of real; {объявлен двумерный массив одномерных массивов реалов}
begin
        a[1][2,3]:=2; {А обращаемся к нему как к одномерном массиву двумерных массивов реалов}
        a[1,2,3]:=2; {А здесь как к трёхмерному реалов}
        a[6][8][4]:=2; {А здесь как к одномерному массиву одномерных массивов одномерных массивов реалов}
,
Pascal
1
2
3
4
5
6
7
var a:array[1..n,1..n,1..n]of real; {объявлен трёхмерный массив реалов}
begin
        a[1,2][3]:=2; {А обращаемся к нему как к двумерному массиву одномерных массивов реалов}
        a[1][2,3]:=2; {А здесь как к одномерном массиву двумерных массивов реалов}
        a[3,4]:=a[5,5]; {И здесь как к двумерному массиву одномерных массивов реалов}
        a[1]:=a[8]; {И здесь как к одномерном массиву двумерных массивов реалов}
        a[6][8][4]:=2; {А здесь как к одномерному массиву одномерных массивов одномерных массивов реалов}
. А на c/c++ нет самого понятия многомерного массива. А теперь вопрос: почему? Почему на паскале это синонимы и почему на c/c++ существует только одно из этих двух понятий?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2012, 09:24     Многомерный массив и массив массивов
Посмотрите здесь:

Многомерный массив, Си!!! C++
многомерный массив C++
C++ Многомерный массив
C++ многомерный массив
Многомерный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
20.12.2012, 17:38     Многомерный массив и массив массивов #61
Цитата Сообщение от taras atavin Посмотреть сообщение
Запрещено, что хорошо видно на скриншоте.
На скриншоте написано, что левая часть операции запятая не влияет на выполнение программы. Типа ее можно было бы и не писать. Но компилятор не против. Синтаксически это верно. В квадратных скобках может стоять любое выражение, а запятая вполне легальная бинарная операция для формирования выражений, так же как плюс и минус.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
20.12.2012, 17:43     Многомерный массив и массив массивов #62
Цитата Сообщение от palva Посмотреть сообщение
А что означает: 2[p(), a] не понимаю.
Просто a[2] и 2[a] - то же самое по сути. Про запятую вы курсе.

Добавлено через 2 минуты
Кстати только что по этому поводу новую тему создали: Почему создатели языка C++ придумали такой странный синтаксис обращения к элементам одномерного массива? .
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 17:46  [ТС]     Многомерный массив и массив массивов #63
Блин, действительно предупреждение и игнор. Но ведь это совсем уж странно.
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
20.12.2012, 17:50     Многомерный массив и массив массивов #64
Ага. понял. *(a+2)

Добавлено через 3 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Но ведь это совсем уж странно.
Вам осталось спросить как работает операция "запятая" в выражениях си.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 17:58  [ТС]     Многомерный массив и массив массивов #65
В чём мотивация Страуструпа и Ритчи? Зачем делать этот игнор? Логичней использовать оба операнда.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
21.12.2012, 08:17     Многомерный массив и массив массивов #66
Цитата Сообщение от taras atavin Посмотреть сообщение
В чём мотивация Страуструпа и Ритчи? Зачем делать этот игнор? Логичней использовать оба операнда.

Не по теме:

Создай свой язык на уровне С и используй там оба операнда без игнора


Цитата Сообщение от ForEveR Посмотреть сообщение
taras atavin, Короткий ответ прост: потому что С++ это не Паскаль. И не надо сравнивать. Изучайте спокойно язык, а не задавайтесь вопросом: "почему это есть в одном языке, а в другом нет?"
Цитата Сообщение от taras atavin Посмотреть сообщение
На паскале запятая тоже разделяет параметры.
А еще на Паскале in есть и степень крышкой обозначается и указатель крышкой тоже (^)

Страуструп и Вирт разные люди и разрабатывали разные проекты. Одним разработчикам было удобно одно, а другим другое.
Чего ты глупый такой? Тебе же сказали уже, что это потому, что языки разные.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2012, 08:47     Многомерный массив и массив массивов
Еще ссылки по теме:

C++ Многомерный массив
C++ многомерный массив
Многомерный массив. С++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.12.2012, 08:47  [ТС]     Многомерный массив и массив массивов #67
Цитата Сообщение от daslex Посмотреть сообщение
А еще на Паскале in есть и степень крышкой обозначается и указатель крышкой тоже (^)
Паскаль с бейсиком не путай, на паскале вообще нет степеней, кроме квадратного корня, квадрата, экспоненты и самопискных функций. Всё перечисленное тоже функции.

Добавлено через 1 минуту
Цитата Сообщение от daslex Посмотреть сообщение
Чего ты глупый такой? Тебе же сказали уже, что это потому, что языки разные.
Паскаль и модула два тоже разные, а в них много чего совпадает.

Добавлено через 21 минуту
Цитата Сообщение от daslex Посмотреть сообщение
А еще на Паскале in есть и степень крышкой обозначается и указатель крышкой тоже (^)
Паскаль с бейсиком не путай, на паскале вообще нет степеней, кроме квадратного корня, квадрата, экспоненты и самопискных функций. Всё перечисленное тоже функции.

Добавлено через 1 минуту
Цитата Сообщение от daslex Посмотреть сообщение
Чего ты глупый такой? Тебе же сказали уже, что это потому, что языки разные.
Паскаль и модула два тоже разные, а в них много чего совпадает. Да и в c/c++ тоже есть совпадения с паскалем: точка. плюс, минус, и точка с запятой ведут себя одинаково на всех трёх языках. С другой стороны, c и c++ тоже разные языки, поэтому даже в них при всём их сходстве совпадает всё таки не всё. Это не аргумент. Вопрос не в том, почему языки разные, а в том, почему одно из различий именно такое. Это могло бы и совпадать, а операция "запятая" есть не везде, но как то же Вирт без неё обошелся. В заголовке цикла можно было бы предложить прикладникам такой синтаксис:
C++
1
for (i=1; i<=n; ++i)
для одного счётчика и такой:
C++
1
for ({i=1; j=1} i<=n {++i; ++j})
для нескольких, а в других местах она вообще не очень то и нужна. А можно сделать саму операцию, но пойти на принцип, из-за которого сравнение уже сделано двойным равенством, а обращение к члену по указателю на объект через комбинацию минуса и знака "больше" и обозначить эту операцию не запятой, а
C++
1
.,
(точка с запятой, но из двух символов и по горизонтали). Знающего язык векторные индексы напрягать не могут, а не знающий ничего хорошего не напишет всё равно, так что отсутствие именно обязательной синонимичности многомерных массивов массивам массивов - не недостаток. По идее многомерные массивы-объекты есть и на c++, это массивы-объекты с многомерными индексами. А хочет прикладник реализовать синонимичность, или нет, это его дело. Но подобное различие - это повод поинтересоваться мотивацией авторов. Может я свой кривоязык сочиняю и хочу знать, какие грабли он обходил, чтоб свою поделуху не слепить ещё кривее? Мотивация Вирта мне понятна: так как нет многомерных массивов, то остаётся единственная возможность сделать многомерные массивы, а перегрузка была придумана позже. Остаётся мотивация авторов c и c++.
Yandex
Объявления
21.12.2012, 08:47     Многомерный массив и массив массивов
Ответ Создать тему
Опции темы

Текущее время: 07:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru