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

Объяснить строку объявления массива - C++

Восстановить пароль Регистрация
 
Zugunder
0 / 0 / 0
Регистрация: 31.05.2014
Сообщений: 24
31.07.2014, 23:52     Объяснить строку объявления массива #1
Ньюанс
C++
1
int* array =  new int[m, n];
на С/C++

Пришлость мне недавно C# код в почти голый C(C++) переписывать.

Как-то прощелкал и след. выражение C#:
C#
1
int[,] TransposeMatrix = new int[m, n];
автоматом "перевел" так (неправильно):
C++
1
int *TransposeMatrix = int TType[m, n];


Оно собралось. VS2008. И даже на такой доступ не материлось:
C++
1
TransposeMatrix[2, 1] = 2;
Понятно, что работало не так, как надо. Обнаружил позже.


А правильно ведь так (одномерный массив)
C++
1
int *TransposeMatrix = int TType[m * n];
Вопрос, а что же всетаки делает int *TransposeMatrix = int TType[m, n]; ?
Что оно создает? И если собирается без ошибок компилятора, то для чего задумана подобная конструкция.
Равно как при
TransposeMatrix[2, 1] = 2; куда оно пишется?


Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2014, 23:52     Объяснить строку объявления массива
Посмотрите здесь:

C++ rand + ошибки объявления массива
Объяснить строку C++
C++ Объявления массива.
Инициализация массива после объявления C++
Шаблоны массива класса array (объяснить) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jewbacabra
1787 / 1502 / 538
Регистрация: 24.04.2014
Сообщений: 4,215
31.07.2014, 23:55     Объяснить строку объявления массива #2
C++
1
cout << "2, 1 = " << (2, 1);
http://msdn.microsoft.com/ru-ru/library/zs06xbxh.aspx
Zugunder
0 / 0 / 0
Регистрация: 31.05.2014
Сообщений: 24
01.08.2014, 00:12  [ТС]     Объяснить строку объявления массива #3
func_one( x, y + 2, z );
func_two( (x--, y + 2), z );
In the function call to func_one above, three arguments, separated by commas, are passed: x, y + 2, and z. In the function call to func_two, parentheses force the compiler to interpret the first comma as the sequential-evaluation operator. This function call passes two arguments to func_two. The first argument is the result of the sequential-evaluation operation (x--, y + 2), which has the value and type of the expression y + 2; the second argument is z.


Ну и напоследок вопрос:

А применяет ли на практике кто подобное??? Практично?
Оно вероятно удобно. Но может быть источником ошибок.
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
01.08.2014, 02:07     Объяснить строку объявления массива #4
Цитата Сообщение от Zugunder Посмотреть сообщение
А применяет ли на практике кто подобное???
Очень редко. Эта вещь из разряда сомнительных.
Но перегрузка оператора "запятая" широко используется, например, в библиотеке boost::spirit. Там это вполне оправдано. Хотя кто-то саму boost::spirit в сомнительные может отнести. Поэтому тут каждый случай надо отдельно смотреть. Но ты сам правильно написал самый главный довод против:
Цитата Сообщение от Zugunder Посмотреть сообщение
может быть источником ошибок.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.08.2014, 12:07     Объяснить строку объявления массива #5
Цитата Сообщение от Zugunder Посмотреть сообщение
А применяет ли на практике кто подобное???
Оператор запятая (в своем исходном, т.е. не перегруженном виде) используется например в циклах:
C++
1
for( int i=5, j=10; i<10; ++i, ++j)
в тернарном операторе:
C++
1
    return v ? g(), 42 : 100500;
Yandex
Объявления
01.08.2014, 12:07     Объяснить строку объявления массива
Ответ Создать тему
Опции темы

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