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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Zugunder
0 / 0 / 0
Регистрация: 31.05.2014
Сообщений: 24
#1

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

31.07.2014, 23:52. Просмотров 272. Ответов 4
Метки нет (Все метки)

Ньюанс
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++
Объяснить строку C++
C++ Функция объявления двумерного массива
C++ Объяснить строку кода
C++ Объяснить код, получение размерности массива
C++ Объяснить почему не работает заполнение массива
C++ Объяснить почему указатель выводит всю строку сразу, а не адрес первого элемента
Объяснить и прокомментировать каждую строку кода C++
C++ Прошу объяснить первую строку

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jewbacabra
1959 / 1623 / 590
Регистрация: 24.04.2014
Сообщений: 4,611
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
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
01.08.2014, 02:07     Объяснить строку объявления массива #4
Цитата Сообщение от Zugunder Посмотреть сообщение
А применяет ли на практике кто подобное???
Очень редко. Эта вещь из разряда сомнительных.
Но перегрузка оператора "запятая" широко используется, например, в библиотеке boost::spirit. Там это вполне оправдано. Хотя кто-то саму boost::spirit в сомнительные может отнести. Поэтому тут каждый случай надо отдельно смотреть. Но ты сам правильно написал самый главный довод против:
Цитата Сообщение от Zugunder Посмотреть сообщение
может быть источником ошибок.
Tulosba
:)
Эксперт С++
4383 / 3226 / 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     Объяснить строку объявления массива
Ответ Создать тему
Опции темы

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