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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 67, средняя оценка - 4.67
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
#1

Передача двумерного массива через указатели - C++

06.11.2010, 17:19. Просмотров 9944. Ответов 19
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
void input (float *, int const, int const);
void main (void)
{
    
    int const n=5, m=5;
    float B[n][m];
    input (B, n, m);
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void input (float *B, int const n, int const m)
{
    int i, j;
    cout << "Input i: ";
        cin >> i;
    cout << "Input j: ";
        cin >> j;
    cout <<  "Input elements of file";
    for (int str=0; str<n; str++)
    {
        for (int stl=0; stl<m; stl++)
        {
            cin >> B[str][stl];
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2010, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача двумерного массива через указатели (C++):

Передача двумерного массива в функцию через указатели - C++
поставлена такая задача - Реализовать функцию перемножения двумерных матриц bool Multi-plyMatrices(int** matrixA, int aRows, int aCols,...

Преобразование нединамического двумерного массива через указатели - C++
Здравствуйте. Почему эта программа крашится? #include&lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; int main() { int i,j,...

Передача динамического двумерного массива через параметры - C++
в такой вот простенькой программке: #include .. const n = 4; void ENTR(double pMas, char *file) { ifstream SMas(file); ...

Передача в функцию через указатели - C++
Компилятор говорит, что что-то не так с передачей max и min. Что? #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; ...

Передача массива и указатели - C++
Приветствую всех. Говорил с другом о передаче в функцию, в и сказал, что если например есть такой код, int f(int *a) я сказал, что это...

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

19
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
06.11.2010, 17:24 #2
C++
1
void input (float **, int const, int const);
0
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
06.11.2010, 18:43  [ТС] #3
Не работает! В main при вызове input(B,n,m) подчеркивает B.
0
Lerny
56 / 56 / 3
Регистрация: 14.03.2010
Сообщений: 151
06.11.2010, 18:54 #4
Создавай в дин. памяти)

C++
1
void input (float **, int const, int const);
C++
1
2
3
int **B = new int *[n];
for (int i=0; i<n; i++)
         B[i] = new int [m];
C++
1
input (B, n, m);
C++
1
2
3
for (int i=0; i<n; i++) delete [] B[i];
delete [] B;
B=NULL;
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
06.11.2010, 19:14 #5
Если массив статический
C++
1
void input (float (*B)[m], int const n, int const m)
либо
C++
1
void input (float B[][m], int const n, int const m)
0
Lerny
56 / 56 / 3
Регистрация: 14.03.2010
Сообщений: 151
06.11.2010, 19:32 #6
rangerx, я так понял ему надо заполнить массив вызвав функцию, тут статика не поможет.

Добавлено через 9 минут
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
36
37
void input (float **B, int const n, int const m)
{
        for (int str=0; str<n; str++)
        {
                for (int stl=0; stl<m; stl++)
                {
                        cout << "B["<<str<<"]["<<stl<<"]: ";
                        cin >>B[str][stl];
                }
        }
}
void main()
{
int n, m;
        cout << "Input row count: ";
                cin >> n;
        cout << "Input cloumn count: ";
                cin >> m;
float **B = new float *[n];
for (int i=0; i<n; i++)
         B[i] = new float [m];
 
input(B,n,m);
 
        for (int str=0; str<n; str++)
        {
                for (int stl=0; stl<m; stl++)
                {
                        cout <<B[str][stl]<<" ";
                }
                cout << endl;
        }
 
for (int i=0; i<n; i++) delete [] B[i];
delete [] B;
B=NULL;
}
1
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
06.11.2010, 20:02  [ТС] #7
Мне нужно как раз сделать и в динамике и в статике. Мне нужно вызвать функцию ввода массива. Пока ещё не один из предложенных вариантов не работает. В main при вызове функции input(B,n,m) подчеркивает "B" и выдает "Аргумент типа float(*)[5] несовместим с параметром типа float "
0
Lerny
56 / 56 / 3
Регистрация: 14.03.2010
Сообщений: 151
06.11.2010, 20:13 #8
MarchZM, последний мой пример у меня прекрасно работает.
0
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
06.11.2010, 22:30  [ТС] #9
В статике!
0
Lerny
56 / 56 / 3
Регистрация: 14.03.2010
Сообщений: 151
07.11.2010, 00:20 #10
Если использовать статический массив, то можно передавать в функцию указатель на первый элемент массива.

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
void input (float *p, int const n, int const m)
{
for (int str=0; str<2; str++)
        for (int stl=0; stl<2; stl++)
        {
         cout << "B["<<str<<"]["<<stl<<"]: ";
         cin >> p[2*str + stl];
        }
}
 
void main()
{
        float A[2][2];
 
        input(&A[0][0],2,2);
 
        for (int str=0; str<2; str++)
        {
                for (int stl=0; stl<2; stl++)
                {
                        cout << A[str][stl]<<" ";
                }
                cout << endl;
        }
}
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 03:29 #11
Цитата Сообщение от rangerx
C++
1
void input (float (*B)[m], int const n, int const m)
C++
1
2
3
4
5
6
    const int N = 5;
    const int M = 5;
 
    float b[N][M];
 
    input(&b[0], N, M);
0
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
07.11.2010, 11:16  [ТС] #12
Цитата Сообщение от accept Посмотреть сообщение
C++
1
input(&b[0], N, M);
Как было так и осталось только теперь подчеркивает Амперсанд и выводит ту же ошибку что и раньше

C++
1
void input (float (*B)[m], int const n, int const m)
Тут подчеркивает
C++
1
(*B)[m]
- m неопределенный идентификатор
0
Lerny
56 / 56 / 3
Регистрация: 14.03.2010
Сообщений: 151
07.11.2010, 11:21 #13
Да передай ты указатель на первый элемент массива, или сделай массив указателей.
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 11:54 #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
const int N = 5;
const int M = 5;
 
void input(float (*b)[M], const int n, const int m);
 
int main(void)
{
    float b[N][M];
 
    input(&b[0], N, M);
    return 0;
}
0
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
07.11.2010, 12:36  [ТС] #15
Цитата Сообщение от accept Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
const int N = 5;
const int M = 5;
 
void input(float (*b)[M], const int n, const int m);
 
int main(void)
{
    float b[N][M];
 
    input(&b[0], N, M);
    return 0;
}
И что там поменялось, ну заменили m на M а толку? Не работает и всё

Добавлено через 1 минуту
Цитата Сообщение от Lerny Посмотреть сообщение
Да передай ты указатель на первый элемент массива, или сделай массив указателей.
Мне массив надо полностью передать, а не первый элемент, так в задании сказано
0
07.11.2010, 12:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2010, 12:36
Привет! Вот еще темы с ответами:

Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива. - C++
Транспонировать матрицу через ввод вывод функции двумерного массива.Сначала вывести ее,а потом провести транспонирование.

Указатели и массивы. Передача массива в функцию по указателю - C++
Как передать массив в функцию,которая должна заполнить этот массив ? Вот,что я составил, но компилятор ругается: #include &quot;stdafx.h&quot; ...

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

Передача двумерного массива - C++
Помогите разобраться int func(int *arr) { arr=1; } void main(){ int arr; arr=1;


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

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

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