Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/103: Рейтинг темы: голосов - 103, средняя оценка - 4.96
 Аватар для Hunter9494
20 / 18 / 15
Регистрация: 29.10.2012
Сообщений: 157

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

03.07.2014, 11:18. Показов 21623. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу передать массив в фунцию
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
int min(int Array[][3])
{
    int min = 0;
    min = Array[0][0];
    for(int i=0;i<3;i++){
for(int j=0;j<3;j++)
if(Array[i][j]<min)
    min=Array[i][j];
    }
return min;
}
 
 
int main{
cout<<"Введите массив A"<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>A[i][j];
}
cout<<endl;
}
 
int min1 = min(A);
 
cout<<min1;
}
выдает ошибку
Ошибка 1 error C2664: min: невозможно преобразовать параметр 1 из "int [3][3]" в "int"
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.07.2014, 11:18
Ответы с готовыми решениями:

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

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

Передача двумерного массива в функцию
Доброго времени суток, форумчане. Столкнулся с проблемой передачи двумерного массива (матрицы) по указателю в функцию. Подскажите?...

25
3 / 3 / 4
Регистрация: 03.07.2014
Сообщений: 19
03.07.2014, 11:40
Один из вариантов - это передать его как указатель. Костыль, но работает.
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
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdlib.h>
const int n = 3;//Размерность массива
void func(int** param);
int main()
{
    int Array[n][n];
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<n; j++)
        {
            Array[i][j] = i*n+j;
        }
    }
    //Тот самый костыль, который обеспечивает передачу в функцию
    int** mas = new int*[n];
    for(int i = 0; i<n; i++)
    {
        mas[i] = &Array[i][0];
    }
    func(mas);
    return 0;
}
void func(int** param)
{
    int** arr = param;
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<n; j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
}
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
03.07.2014, 11:43
Очевидно, что аргументом функции должна быть ссылка на массив

C++
1
2
3
4
5
6
7
8
9
10
void f( int ( &arr )[ 3 ][ 3 ] ) {
 
}
 
int main() {
  int arr[ 3 ][ 3 ] = {};
  f( arr );
 
  return 0;
}
0
3 / 3 / 4
Регистрация: 03.07.2014
Сообщений: 19
03.07.2014, 11:45
А вообще странно. Вот пример без костылей и тоже все работает. Напрямую передача массива в функцию.
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
27
28
#include <stdio.h>
#include <stdlib.h>
const int n = 3;//Размерность массива
void func(int arr[][n]);
int main()
{
    int Array[n][n];
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<n; j++)
        {
            Array[i][j] = i*n+j;
        }
    }
    func(Array);
    return 0;
}
void func(int arr[][n])
{
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<n; j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
}
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
03.07.2014, 11:57
Лучший ответ Сообщение было отмечено Hunter9494 как решение

Решение

Вся проблема в том, что вы не определили размер массива глобально. Т.е. в функцию передается массив array[][3], а в теле main используется массив array[][n]. Вот вам и не стыковочка. Если это исправить то проблем не будет:
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
27
28
29
#include <iostream>
    const int n = 3;
int min(int Array[][n])
{
    int min = 0;
    min = Array[0][0];
    for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
if(Array[i][j]<min)
    min=Array[i][j];
    }
return min;
}
 
 
int main(){
 
    int A[n][n];
    std::cout<<"Input array A:"<<std::endl;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            std::cin>>A[i][j];
        }
        std::cout<<std::endl;
    }
    int min1 = min(A);
    std::cout<<min1;
    return 0;
}
Сразу открещиваюсь - используется авторская расстановка скобок...
2
3 / 3 / 4
Регистрация: 03.07.2014
Сообщений: 19
03.07.2014, 12:01
тоже верно. я в своем рабочем примере это указал как-то на автомате
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
03.07.2014, 12:06
Цитата Сообщение от Voivoid Посмотреть сообщение
Очевидно, что аргументом функции должна быть ссылка на массив
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
 
void f( int arr[ 3 ][ 3 ] ) {
arr[0][0]=99;
}
 
int main() {
  int arr[ 3 ][ 3 ] = {};
  std::cout<<" before "<<arr[0][0]<<"\n";
  f( arr );
  std::cout<<" after "<<arr[0][0]<<"\n"; 
  return 0;
}
Кому очевидно?
1
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
03.07.2014, 12:11
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Кому очевидно?
Всем тем, кто хочет писать надежный код.

Как думаешь какой тип у аргумента функции f? И как думаешь можно ли передать в эту функцию например такой массив:

int arr[42][3] = {};
f( arr );
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.07.2014, 12:17
Для меня это тоже не очевидно. Я бы даже сказал что ссылка там излишняя.
1
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
03.07.2014, 12:18
Цитата Сообщение от Voivoid Посмотреть сообщение
Как думаешь
Я думаю, что массивы по значению не передаются.
Вариантов передать параметр я знаю достаточное количество различной надежности.
1
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
03.07.2014, 12:23
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Кому очевидно?
Voivoid, дело говорит. Так как при передаче по ссылке вы автоматически передаете сигнатуру массива, которая определяется всеми своими размерами. При передаче по указателю такой возможности нет.

Добавлено через 3 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Для меня это тоже не очевидно. Я бы даже сказал что ссылка там излишняя.
Но в противном случае необходимо передавать и размер массива. Как считаете? Но этого нет, поэтому Voivoid и сделал вполне резонное замечание, что передавать необходимо ссылку.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.07.2014, 12:27
В других случаях это может быть полезным, но я не вижу причин использования ссылки в данном примере.
1
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
03.07.2014, 12:31
Цитата Сообщение от castaway Посмотреть сообщение
В других случаях это может быть полезным, но я не вижу причин использования ссылки в данном примере.
Это уже вопросы к ТС.
1
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
03.07.2014, 12:33
Цитата Сообщение от Ilot Посмотреть сообщение
дело говорит
Вполне возможно, только не вижу связи с вопросом.
1
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
03.07.2014, 12:36
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Вполне возможно, только не вижу связи с вопросом.
Дабы узреть сие действо соблаговолите вознести свои очи ко второй половине поста №11. (Юмор, не путать с грубостью)
1
 Аватар для Hunter9494
20 / 18 / 15
Регистрация: 29.10.2012
Сообщений: 157
03.07.2014, 12:48  [ТС]
Всем спасибо)
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
03.07.2014, 13:20
Цитата Сообщение от Ilot Посмотреть сообщение
второй половине поста №11
На мой взгляд, конструктив кончился на посте №5
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
03.07.2014, 15:19
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Я думаю, что массивы по значению не передаются.
к чему это?

Цитата Сообщение от castaway Посмотреть сообщение
Для меня это тоже не очевидно. Я бы даже сказал что ссылка там излишняя.
Лол, как она может быть излишняя? Ссылки стоит употреблять всегда за исключением случаев, когда аргумент опционален, в этом случае можно использовать указатели дабы была возможность передать nullptr
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.07.2014, 15:54
Какая выгода от ссылки в данном случае? Массив передаётся по адресу, ссылка - тот же адрес.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
03.07.2014, 16:17
Цитата Сообщение от Voivoid Посмотреть сообщение
к чему это?
К тому, что все остальное - дело личных предпочтений АКА малосущественные подробности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.07.2014, 16:17
Помогаю со студенческими работами здесь

Передача двумерного массива в функцию
Неожиданно для себя столкнулся с такой вот проблемой . Есть две функции : void print_matrix(double ** A, int n) { for (int i = 0;...

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

Передача двумерного массива в функцию
Добрый день! Для решения задачи мне нужно передать в функцию двумерный массив так, чтобы его элементы изменялись везде. Как это...

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru