Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Hunter9494
21 / 18 / 3
Регистрация: 29.10.2012
Сообщений: 154
#1

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

03.07.2014, 11:18. Просмотров 1525. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2014, 11:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передача двумерного массива в функцию (C++):

Передача двумерного массива в функцию - C++
Не нашел в поиске, как правильно передавать в функцию в качестве параметра двумерный массив произвольного размера, чтобы в функции была...

Передача в функцию двумерного массива - C++
Доброго времени суток. Есть двумерный массив, размерностью n на m. Нужно передать его в качестве параметра в функцию 1) обычным способом 2)...

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

Передача двумерного массива в функцию - C++
Всем доброго времени суток! В Си, при объявлении двумерного массива, можно было сразу проинициализировать его значения: char...

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

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

25
zibertscrem
3 / 3 / 1
Регистрация: 03.07.2014
Сообщений: 19
03.07.2014, 11:40 #2
Один из вариантов - это передать его как указатель. Костыль, но работает.
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
677 / 280 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
03.07.2014, 11:43 #3
Очевидно, что аргументом функции должна быть ссылка на массив

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
zibertscrem
3 / 3 / 1
Регистрация: 03.07.2014
Сообщений: 19
03.07.2014, 11:45 #4
А вообще странно. Вот пример без костылей и тоже все работает. Напрямую передача массива в функцию.
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
Эксперт С++
1826 / 1184 / 232
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
03.07.2014, 11:57 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вся проблема в том, что вы не определили размер массива глобально. Т.е. в функцию передается массив 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;
}
Сразу открещиваюсь - используется авторская расстановка скобок...
1
zibertscrem
3 / 3 / 1
Регистрация: 03.07.2014
Сообщений: 19
03.07.2014, 12:01 #6
тоже верно. я в своем рабочем примере это указал как-то на автомате
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
03.07.2014, 12:06 #7
Цитата Сообщение от 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;
}
Кому очевидно?
0
Voivoid
677 / 280 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
03.07.2014, 12:11 #8
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Кому очевидно?
Всем тем, кто хочет писать надежный код.

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

int arr[42][3] = {};
f( arr );
1
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
03.07.2014, 12:17 #9
Для меня это тоже не очевидно. Я бы даже сказал что ссылка там излишняя.
1
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
03.07.2014, 12:18 #10
Цитата Сообщение от Voivoid Посмотреть сообщение
Как думаешь
Я думаю, что массивы по значению не передаются.
Вариантов передать параметр я знаю достаточное количество различной надежности.
1
Ilot
Эксперт С++
1826 / 1184 / 232
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
03.07.2014, 12:23 #11
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Кому очевидно?
Voivoid, дело говорит. Так как при передаче по ссылке вы автоматически передаете сигнатуру массива, которая определяется всеми своими размерами. При передаче по указателю такой возможности нет.

Добавлено через 3 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Для меня это тоже не очевидно. Я бы даже сказал что ссылка там излишняя.
Но в противном случае необходимо передавать и размер массива. Как считаете? Но этого нет, поэтому Voivoid и сделал вполне резонное замечание, что передавать необходимо ссылку.
1
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
03.07.2014, 12:27 #12
В других случаях это может быть полезным, но я не вижу причин использования ссылки в данном примере.
1
Ilot
Эксперт С++
1826 / 1184 / 232
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
03.07.2014, 12:31 #13
Цитата Сообщение от castaway Посмотреть сообщение
В других случаях это может быть полезным, но я не вижу причин использования ссылки в данном примере.
Это уже вопросы к ТС.
1
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
03.07.2014, 12:33 #14
Цитата Сообщение от Ilot Посмотреть сообщение
дело говорит
Вполне возможно, только не вижу связи с вопросом.
1
Ilot
Эксперт С++
1826 / 1184 / 232
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
03.07.2014, 12:36 #15
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Вполне возможно, только не вижу связи с вопросом.
Дабы узреть сие действо соблаговолите вознести свои очи ко второй половине поста №11. (Юмор, не путать с грубостью)
1
03.07.2014, 12:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2014, 12:36
Привет! Вот еще темы с ответами:

Передача в функцию двумерного массива - C++
Вводится две квадратные матрицы разного размера, посчитать сумму модулей отрицательных элементов каждой матрицы, и среднее значение 2-х...

Передача двумерного массива в функцию - C++
Даны две квадратные матрицы nxn. Напечатать ту из них, которая имеет минимальный “след” (т.е. сумму элементов главной диагонали). При...

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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