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

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

Войти
Регистрация
Восстановить пароль
 
 
G6
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 30
#1

Функция и двумерный массив - C++

12.06.2014, 16:45. Просмотров 353. Ответов 18
Метки нет (Все метки)

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

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>
#include <stdlib.h>
#include <time.h>
#include <clocale>
 
using namespace std;
 
void opredelitel( int* );
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
    const int N=3;
    int A[N][N];
    srand(time(NULL));
 
    for (int i=0;i<N;i++)
        for (int j=0;j<N;j++)
            A[i][j]=rand()%10-10;       
        for (int i=0;i<N;i++){
            for (int j=0;j<N;j++){
                cout<<A[i][j]<<"  ";}
            cout<<endl;}
 
        opredelitel(*A);
}
            
void opredelitel(int* A[][])
{
    
    cout<<A[0][0]<<endl;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 16:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция и двумерный массив (C++):

Двумерный массив и функция - C++
Нууууу плиззз подскажите как сделать в виде отдельной функции????? Borland C++ #include&lt;iostream.h&gt; #include&lt;math.h&gt; ...

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

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

Функция и двумерный массив. - C++
День добрый. У меня такое задание: нужно создать функцию которая будет находить сумму элементов в тех строках, которые содержат хотя бы...

Функция, принимающая двумерный массив - C++
Дело такое: Есть функция, которая в параметрах принимает двумерный массив. Причем двумерные массивы будут различаться, как в количество...

Функция возвращает двумерный массив - C++
У кого-то есть пример возврата функцией массива? Я пыталась сделать как с обычной переменной - оно компилируется, но не возфращает...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
12.06.2014, 16:49 #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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <clocale>
 
using namespace std;
 
const int N=3; 
void opredelitel(int A[][N])
{
    cout<<A[0][0]<<endl;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
 
    int A[N][N];
    srand(time(NULL));
 
    for (int i=0;i<N;i++)
        for (int j=0;j<N;j++)
            A[i][j]=rand()%10-10;       
        for (int i=0;i<N;i++){
            for (int j=0;j<N;j++){
                cout<<A[i][j]<<"  ";}
            cout<<endl;}
 
        opredelitel(A);
}
0
G6
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 30
12.06.2014, 16:55  [ТС] #3
Извини, но такой вариант я сам сделал. Спасибо за ответ, но нужно через указатели
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
12.06.2014, 17:53 #4
Цитата Сообщение от G6 Посмотреть сообщение
такой вариант я сам сделал
Что-то не видно. Где же он?
Цитата Сообщение от G6 Посмотреть сообщение
нужно через указатели
Нужно понимать что нужно, прежде чем просить.
Могу предложить такой вариант, но не знаю насколько он соответствует ожиданиям:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <clocale>
 
using namespace std;
 
const int N=3; 
void opredelitel(int* A)
{
    cout<<A[0]<<endl;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
 
    int A[N][N];
    srand(time(NULL));
 
    for (int i=0;i<N;i++)
        for (int j=0;j<N;j++)
            A[i][j]=rand()%10-10;       
        for (int i=0;i<N;i++){
            for (int j=0;j<N;j++){
                cout<<A[i][j]<<"  ";}
            cout<<endl;}
 
        opredelitel(&A[0][0]);
}
1
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,981
Записей в блоге: 27
12.06.2014, 17:56 #5
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
38
39
40
41
42
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <clocale>
 
using namespace std;
 
void opredelitel( int** m);
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
    const int N=3;
    int** A = new int*[N];
    for (int i =0; i < N; ++i)
        A[i] = new int[N];
 
    srand(time(NULL));
 
    for (int i=0;i<N;i++)
        for (int j=0;j<N;j++)
            A[i][j]=rand()%10-10;       
        for (int i=0;i<N;i++){
            for (int j=0;j<N;j++){
                cout<<A[i][j]<<"  ";}
            cout<<endl;}
 
        opredelitel(A);
 
        for (int i =0; i < N; ++i)
            delete [] A[i];
 
        delete []A;
        system("pause>>null");
}
            
void opredelitel(int** m)
{
    
    cout<<m[0][0]<<endl;
}
1
G6
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 30
12.06.2014, 21:02  [ТС] #6
Нет, я без шуток говорил, я действительно реализовал вариант без указателей. Просто мне хотелось понять, как реализовать с указателем. И что именно нужно я тоже сказал:
А нужно чтобы просто по указателю двумерный массив передался в функцию.
Но вообще спасибо за второй вариант.

Добавлено через 5 минут
Спасибо за твой вариант, о ты бы не могла пояснить одну вещь, что ты делаешь здесь:
C++
1
2
3
int** A = new int*[N];
    for (int i =0; i < N; ++i)
        A[i] = new int[N];
0
Renji
1917 / 1315 / 298
Регистрация: 05.06.2014
Сообщений: 3,758
12.06.2014, 21:11 #7
А нужно чтобы просто по указателю двумерный массив передался в функцию.
void opredelitel(int(*array)[5][5]){}
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
12.06.2014, 21:14 #8
C++
1
2
3
4
    const int N=3;
    int** A = new int*[N];
    for (int i =0; i < N; ++i)
        A[i] = new int[N];
Не, это не спортивно . Как все-таки без костылей передать параметром динамический массив?
0
Renji
1917 / 1315 / 298
Регистрация: 05.06.2014
Сообщений: 3,758
12.06.2014, 21:18 #9
Не, это не спортивно . Как все-таки без костылей передать параметром динамический массив?
Динамический в смысле неизвестной размерности - никак. Если функция эту размерность не знает, она не сможет корректно работать с массивом. Динамический в смысле "в динамической памяти" - смотри мой пост выше.
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
12.06.2014, 21:28 #10
Цитата Сообщение от Renji Посмотреть сообщение
Динамический в смысле неизвестной размерности - никак. Если функция эту размерность не знает, она не сможет корректно работать с массивом. Динамический в смысле "в динамической памяти" - смотри мой пост выше.
Ну вот этот момент и интересует. Конструкция есть, причем довольно давно и уже в стандарте, а механизма ее полноценного использования так и нет.
0
Renji
1917 / 1315 / 298
Регистрация: 05.06.2014
Сообщений: 3,758
12.06.2014, 21:37 #11
Ну вот этот момент и интересует. Конструкция есть, причем довольно давно и уже в стандарте, а механизма ее полноценного использования так и нет.
И не будет. Вы потроха массива себе представляете?
C++
1
2
int array[size_x][size_y];
int test=array[x][y];
Эквивалентно
C++
1
2
int array[size_x*size_y];
int test=array[x*size_y+y];
Не зная size_y, нельзя посчитать и test. Но сам array нигде внутри себя этот size_y не хранит, потому что он - последовательность int, а не хранилище для количества этих int. Так откуда opredelitel должен этот size_y узнать, чтобы корректно рассчитывать адреса элементов двумерного массива? Вот и получаем что с переменной размерностью указатель на двумерный массив не взлетит.
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
12.06.2014, 21:40 #12
Цитата Сообщение от Renji Посмотреть сообщение
Вы потроха массива себе представляете?
Вполне . Потому и интересуюсь кто как и для чего использует динамические массивы на стеке.
0
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,981
Записей в блоге: 27
12.06.2014, 22:56 #13
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Не, это не спортивно . Как все-таки без костылей передать параметром динамический массив?
В чём проблема? Я что-то не поняла. Не вижу Ваших предложений, спортивных, так сказать.
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
13.06.2014, 05:18 #14
Цитата Сообщение от Тамика Посмотреть сообщение
Не вижу Ваших предложений, спортивных, так сказать.
м.б. оно есть я а не вижу? Разряд не позволяет .
Так-то я и сам могу.
0
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,981
Записей в блоге: 27
13.06.2014, 10:05 #15
uglyPinokkio, ну так может стоит сначала свой вариант предложить, а потом выступать? Жду Вашего предложения, маэстро. И попрошу корректно объяснить "неспортивность" моего кода. Н-ну?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 10:05
Привет! Вот еще темы с ответами:

Функция, возвращающая указатель на двумерный массив - C++
Добрый день! Столкнулся с конструкцией которую раньше не видел, и не до конца понимаю что это и как работает: #include &lt;stdio.h&gt; ...

Двумерный массив. Функция возвращает мусор - C++
Добрый день. Необходимо сгенерировать матрицу и заполнить ее. Написал вот такую функцию float** GenerateNaturalNumbers(int...

Функция выводить на печать одномерный и двумерный массив - C++
Написать функции для печати одномерного и двумерных массивов. #include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; ...

Функция для добавления строки в двумерный массив - C++
Помогите написать функцию для добавления в двумерный массив строки


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.06.2014, 10:05
Ответ Создать тему
Опции темы

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