Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
3 / 3 / 1
Регистрация: 20.09.2010
Сообщений: 100

Передача двумерного массива в функцию

09.10.2012, 22:05. Показов 2188. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Неожиданно для себя столкнулся с такой вот проблемой . Есть две функции :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void print_matrix(double ** A, int n) {
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            cout << A[i][j] << "\t";
        }
        cout << endl;
    }
}
void print_vector(double * x, int n) {
    for (int i = 0; i < n; ++i) {
        cout << x[i] << endl;
    }
}
Но при вызове работает только вторая функция (первая вызывает ошибку):
C++
1
2
3
4
5
6
7
8
9
10
11
int main() {
    double A[4][4] = {{0.11, -0.17, 0.72, -0.34,}, 
                    {0.81, 0.12, -0.91, 0.17}, 
                    {0.17, -0.18, 1.00, 0.28}, 
                    {0.13, 0.17, -0.99, 0.35}};
    double b[4] = {0.17, 1.00, 0.21, 2.71};
    //print_matrix(A,4);
    print_vector(b,4);
    system("pause");
    return 0;
}
Печатать матрицу программа не хочет , выдает ошибку о том , что не может перевести переменную к типу double ** . Довольно странно , учитывая то , что с одномерным массивом проблем нет . Что делать ? (изменять сигнатуру функции я не хочу ,ибо так она записана в более общем виде) .
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2012, 22:05
Ответы с готовыми решениями:

Передача двумерного массива в функцию
в функцию set_ships передаю массив human, появляется ошибка cannot convert `int (*)' to `int**' for argument `1' to `void set_ships(int**)'...

Передача двумерного массива в функцию
Не могу передать массив в фунцию int min(int Array) { int min = 0; min = Array; for(int i=0;i&lt;3;i++){ for(int...

Передача двумерного массива в функцию
Приветствую всех. Помогите пожалуйста советом. Уже три вечера сижу над одной задачей. Задача такая: 3. Используя функции сформировать...

4
2393 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
09.10.2012, 22:21
Цитата Сообщение от dota Посмотреть сообщение
выдает ошибку о том , что не может перевести переменную к типу double ** . Довольно странно , учитывая то , что с одномерным массивом проблем нет . Что делать ?
Ничего странного, если учитывать такую вещь: в функцию передаётся не массив, а указатель на его первый элемент, поэтому и работает ваш вариант с одномерным массивом. В случае с двумерным массивом всё чуть сложнее - в функцию опять-таки передаётся указатель на первый элемент массива, но теперь это не просто массив, а массив массивов, поэтому параметр функции - указатель на массив. А у вас - указатель на указатель на double.
Передать двумерный массив в функцию можно так:
C++
1
2
void func(double arr[100][500]);
void func(double (*arr)[500]);
Добавлено через 1 минуту
Ну или опустить число в квадратных скобках.

Добавлено через 2 минуты
Цитата Сообщение от dota Посмотреть сообщение
изменять сигнатуру функции я не хочу ,ибо так она записана в более общем виде
В наиболее общем виде это будет так:
C++
1
2
template <typename T, int N, int M>
void func(T (&arr)[N][M]);
И кстати, при таком подходе функции известен размер массива, что полезно. Правда, такой вариант не все старые компиляторы поддерживают (MSVS 6.0 не поддерживает, например).
1
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
09.10.2012, 22:45
посмотри здесь Передача двумерного массива в функцию
0
3 / 3 / 1
Регистрация: 20.09.2010
Сообщений: 100
09.10.2012, 23:31  [ТС]
Если опустить число в квадратных скобках , то не работает ( А размер матрицы заранее не задан .
0
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,754
Записей в блоге: 9
10.10.2012, 00:39
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
template<typename T>
void Print(T* p, size_t c, size_t r = 1)
{
    for(size_t i = 0; i < r; ++i)
    {
        for(size_t j = 0; j < c; ++j)
        {
            std::cout << p[j + c * i] << "  ";
        }
        std::cout << std::endl;
    }
}
 
int main()
{
    size_t const col = 3;
    double mx[][col] = {{1.1, 2.2, 3.3}, {4.1, 5.2, 6.3}};
    short arr[] = {11, 22, 33, 44, 55, 66};
    std::cout << "array:\n";
    Print(arr, sizeof(arr) / sizeof(*arr));
    std::cout << "\nmatrix:\n";
    Print(*mx, col, sizeof(mx) / sizeof(*mx));
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.10.2012, 00:39
Помогаю со студенческими работами здесь

Передача двумерного массива в функцию
Здравствуйте! Написала код для передачи двумерного массива в функцию: #include &lt;iostream&gt; #include &lt;locale.h&gt; ...

Передача двумерного массива в функцию
проблема в том что в функция inicil не изменяет похожу массива, и в output выводятся нелепые числа... #include &lt;iostream&gt; ...

Передача двумерного массива в функцию
Собственно, вот задание: Даны две матрицы целых чисел M, К. Найти среднее арифметическое значение для каждой из них. Как...

Передача двумерного массива в функцию
Доброго времени суток. Как можно передать двумерный массив в функцию? Допустим есть функция: void filingMatrix(??). Пробовал сделать: ...

Передача двумерного массива в функцию
Возможно это уже и естьна форуме, но как передать из одной функции в другую двумерный массив? (статическое распределение адресов)


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru