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

Статическое объявление матрицы - C++

Восстановить пароль Регистрация
 
Krasiosoft
 Аватар для Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
06.07.2015, 04:33     Статическое объявление матрицы #1
Здравствуйте.

у меня есть матрица А:
C++
1
2
3
4
5
6
    int n, m;
    cout<<"n = ";
    cin>>n;
    cout<<"m = ";
    cin>>m;
    double A[n][m];
Как описать функцию, чтоб в нее можно было передать эту матрицу? И корректно ли так объявлять матрицу?

Заранее благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
06.07.2015, 04:41     Статическое объявление матрицы #2
Как раз так статическую матрицу объявлять нельзя (n,m должны быть константами).
Образец с переменными значениями n,m см. тут:
Образцы (шаблоны) программ для типовых задач
Если все же остановитесь на константах, то
C++
1
2
const int N=5, M=5;
double A[N][M];
И пример функции
C++
1
2
3
4
5
6
7
8
9
10
11
//
//---- ввод матрицы--------------------------------------
//
void Input( int M[N][M], size_t n, size_t m ) {
    for ( size_t i = 0; i < n; ++i ) {
        for ( size_t j = 0; j < m; ++j ) {
            std::cout << "M[" << i << "][" << j << "] = ";
            std::cin >> M[i][j];
        }
    }
}
Krasiosoft
 Аватар для Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
06.07.2015, 05:02  [ТС]     Статическое объявление матрицы #3
zss, спасибо, я в курсе этого.
Интересует именно такой тип объявления. Дело в том, что компилятор не ругается и все работает корректно. А вот передать в функцию не могу.
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
06.07.2015, 05:19     Статическое объявление матрицы #4
Такой вариант возможен только начиная с версии С++11.
Лучше его не использовать.
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
06.07.2015, 05:38     Статическое объявление матрицы #5
Цитата Сообщение от zss Посмотреть сообщение
Такой вариант возможен только начиная с версии С++11.
В С++11 такой вариант тоже невозможен.
Такой вариант возможен только в GCC, благодаря поддержке VLA, заимствованной из С99.
Подробности про GCC.
Krasiosoft
 Аватар для Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
06.07.2015, 16:09  [ТС]     Статическое объявление матрицы #6
Цитата Сообщение от DrOffset Посмотреть сообщение
В С++11 такой вариант тоже невозможен.
Такой вариант возможен только в GCC, благодаря поддержке VLA, заимствованной из С99.
Подробности про GCC.
Очень странно, сделал как описано в GCC VLA:

C++
1
2
3
void tester (int len, char data[len][len])
{
}
Выдает ошибку:
use of parameter 'len' outside function body
void tester (int len, char data[len][len])
________________________ ^
А если сделать так:

C++
1
2
3
void tester (int len; char data[len][len], int len)
{
}
То ошибка:
expected ')' before ';' token
tester (int len; char data[len][len], int len)
__________ ^
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.07.2015, 22:24     Статическое объявление матрицы #7
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Очень странно
Просто это для сишного кода надо проверять, а не для плюсового:
http://ideone.com/RP68bZ
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2015, 04:21     Статическое объявление матрицы
Еще ссылки по теме:

Объявление и инициализация динамической матрицы C++
Статическое приведение типов C++
Статическое подключение системных DLL-файлов C++

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

Или воспользуйтесь поиском по форуму:
Nkey
308 / 61 / 10
Регистрация: 21.12.2011
Сообщений: 267
07.07.2015, 04:21     Статическое объявление матрицы #8
Делайте динамическую матрицу, и затем указывайте размер какой нужен.
Yandex
Объявления
07.07.2015, 04:21     Статическое объявление матрицы
Ответ Создать тему
Опции темы

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