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

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

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

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

06.11.2010, 17:19. Просмотров 10065. Ответов 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
Lerny
56 / 56 / 3
Регистрация: 14.03.2010
Сообщений: 151
07.11.2010, 12:43 #16
Резюмирую уже возможные способы, которые с лихвой хватит:
1. Динамический массив.
C++
1
2
3
4
5
6
7
8
9
10
11
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];
                }
        }
}
C++
1
2
3
4
5
float **B = new float *[n];
for (int i=0; i<n; i++)
         B[i] = new float [m];
 
input(B,n,m);
C++
1
2
3
for (int i=0; i<n; i++) delete [] B[i];
delete [] B;
B=NULL
2.Передача указателя на первый элемент массива
C++
1
2
3
4
5
6
7
8
9
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];
        }
}
C++
1
2
 float A[n][m];
        input(&A[0][0],n,m);
3. Создание массива указателей.
C++
1
2
3
4
5
6
7
8
9
void input (float *p[][2], 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 >> *p[str][stl];
        }
}
C++
1
2
3
4
5
6
7
8
float A[n][m];
        float *p[n][m];
 
        for (int str=0; str<n; str++)
        for (int stl=0; stl<m; stl++)
        p[str][stl]=&A[str][stl];
 
        input(p,n,m);
В последнем случае ты массив полностью передаёшь)
2
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 13:34 #17
Цитата Сообщение от MarchZM Посмотреть сообщение
И что там поменялось, ну заменили m на M а толку? Не работает и всё
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
#include <iostream>
 
using namespace std;
 
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;
}
 
void input(float (*b)[M], const int n, const int 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];
                }
        }
}
3
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
07.11.2010, 16:52  [ТС] #18
Цитата Сообщение от accept Посмотреть сообщение
input(&b[0], N, M)
почему &b[0]? объясните пожалуйста
0
Artishok
ЧакЭ одобряЭ
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
07.11.2010, 16:56 #19
при передаче через указатель надо передавать адрес
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 17:06 #20
&b[0] - это адрес массива из M элементов
&b[0][0] - это адрес элемента

двумерный массив каких-то элементов организован как одномерный массив одномерных массивов этих элементов
поэтому когда мы берём адрес первого элемента в массиве одномерных массивов, мы получаем адрес первого одномерного массива в массиве одномерных массивов
2
07.11.2010, 17:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2010, 17:06
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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