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

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

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

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

31.07.2014, 23:52. Просмотров 282. Ответов 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++
Как увеличить количество переменных в массиве?

Объяснить строку - C++
while (strchr(S,*str)==strrchr(S,*str) ) объясните строку

Объяснить строку - C++
Что значит такая конструкция, например: k->next->prev=tmp

rand + ошибки объявления массива - C++
Здравствуйте. У меня такое задание: Используя датчик случайных чисел, заполнить элементы массива неповторяющимися числами. Вот мой код....

Инициализация массива после объявления - C++
Привет народ, нужна ваша помощь. Допустим у меня есть класс с закрытым полем-массивом: //someClass.h class someClass{ int arr;...

Функция объявления двумерного массива - C++
Данный код - объявляет двумерный массив arr. Как из этого куска кода сделать функцию? Передаваемые параметры как мне кажется n и m, а...

Объяснить строку кода - C++
#pragma comment ( linker, "/EXPORT:MyFunc=_MyFunc@8" ) Объясните, что мы делаем этим. Не уверен, что совсем понял.

Прошу объяснить первую строку - C++
Здравствуйте, я прохожу на данный момент перегрузку операторов, в общем по теоретическому материалу я сейчас перегружаю оператор + в...

Объяснить и прокомментировать каждую строку кода - C++
Добрый вечер нуждаюсь в комментариях к программе , желательно прокомментировать каждую строку. #include "stdafx.h" #include...

Объяснить почему указатель выводит всю строку сразу, а не адрес первого элемента - C++
Всем привет :) Начал изучать сей замечательный язык и появились кое-какие вопросы к гуру! Запутался в указателях... ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jewbacabra
Эксперт PHP
2154 / 1818 / 674
Регистрация: 24.04.2014
Сообщений: 5,305
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
6909 / 4102 / 933
Регистрация: 30.01.2014
Сообщений: 6,893
01.08.2014, 02:07     Объяснить строку объявления массива #4
Цитата Сообщение от Zugunder Посмотреть сообщение
А применяет ли на практике кто подобное???
Очень редко. Эта вещь из разряда сомнительных.
Но перегрузка оператора "запятая" широко используется, например, в библиотеке boost::spirit. Там это вполне оправдано. Хотя кто-то саму boost::spirit в сомнительные может отнести. Поэтому тут каждый случай надо отдельно смотреть. Но ты сам правильно написал самый главный довод против:
Цитата Сообщение от Zugunder Посмотреть сообщение
может быть источником ошибок.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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     Объяснить строку объявления массива
Ответ Создать тему
Опции темы

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