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

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

Восстановить пароль Регистрация
 
G6
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 30
12.06.2014, 16:45     Функция и двумерный массив #1
Я не знаю в чём проблема заключается на этом этапе, но гуглил я много. Если не сложно, просто исправьте код под нужный или объясните, как сделать, чтобы работало. А нужно чтобы просто по указателю двумерный массив передался в функцию.

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 16:45     Функция и двумерный массив
Посмотрите здесь:

C++ Двумерный массив и функция
Функция и двумерный массив. C++
двумерный массив и функция! C++
Функция возвращает двумерный массив C++
Функция, принимающая двумерный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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);
}
G6
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 30
12.06.2014, 16:55  [ТС]     Функция и двумерный массив #3
Извини, но такой вариант я сам сделал. Спасибо за ответ, но нужно через указатели
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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]);
}
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 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;
}
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];
Renji
1533 / 981 / 239
Регистрация: 05.06.2014
Сообщений: 2,950
12.06.2014, 21:11     Функция и двумерный массив #7
А нужно чтобы просто по указателю двумерный массив передался в функцию.
void opredelitel(int(*array)[5][5]){}
uglyPinokkio
325 / 228 / 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];
Не, это не спортивно . Как все-таки без костылей передать параметром динамический массив?
Renji
1533 / 981 / 239
Регистрация: 05.06.2014
Сообщений: 2,950
12.06.2014, 21:18     Функция и двумерный массив #9
Не, это не спортивно . Как все-таки без костылей передать параметром динамический массив?
Динамический в смысле неизвестной размерности - никак. Если функция эту размерность не знает, она не сможет корректно работать с массивом. Динамический в смысле "в динамической памяти" - смотри мой пост выше.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
12.06.2014, 21:28     Функция и двумерный массив #10
Цитата Сообщение от Renji Посмотреть сообщение
Динамический в смысле неизвестной размерности - никак. Если функция эту размерность не знает, она не сможет корректно работать с массивом. Динамический в смысле "в динамической памяти" - смотри мой пост выше.
Ну вот этот момент и интересует. Конструкция есть, причем довольно давно и уже в стандарте, а механизма ее полноценного использования так и нет.
Renji
1533 / 981 / 239
Регистрация: 05.06.2014
Сообщений: 2,950
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 узнать, чтобы корректно рассчитывать адреса элементов двумерного массива? Вот и получаем что с переменной размерностью указатель на двумерный массив не взлетит.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
12.06.2014, 21:40     Функция и двумерный массив #12
Цитата Сообщение от Renji Посмотреть сообщение
Вы потроха массива себе представляете?
Вполне . Потому и интересуюсь кто как и для чего использует динамические массивы на стеке.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
12.06.2014, 22:56     Функция и двумерный массив #13
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Не, это не спортивно . Как все-таки без костылей передать параметром динамический массив?
В чём проблема? Я что-то не поняла. Не вижу Ваших предложений, спортивных, так сказать.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
13.06.2014, 05:18     Функция и двумерный массив #14
Цитата Сообщение от Тамика Посмотреть сообщение
Не вижу Ваших предложений, спортивных, так сказать.
м.б. оно есть я а не вижу? Разряд не позволяет .
Так-то я и сам могу.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
13.06.2014, 10:05     Функция и двумерный массив #15
uglyPinokkio, ну так может стоит сначала свой вариант предложить, а потом выступать? Жду Вашего предложения, маэстро. И попрошу корректно объяснить "неспортивность" моего кода. Н-ну?
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
13.06.2014, 10:42     Функция и двумерный массив #16
Цитата Сообщение от Тамика Посмотреть сообщение
ну так может стоит сначала свой вариант предложить, а потом выступать?
А не знаю я такого варианта, потому и интересно. И где кто выступает?

Цитата Сообщение от Тамика Посмотреть сообщение
И попрошу корректно объяснить "неспортивность" моего кода. Н-ну?
Замена массива на стеке массивом на куче. Не?
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
13.06.2014, 10:44     Функция и двумерный массив #17
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Замена массива на стеке массивом на куче. Не?
Человеку нужно передать указатель на двумерный массив. Потому я сотворила из статического массива динамический. Так в чём проблема? Это запрещено? Это UB? Или может есть куча других правильных способов?
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
13.06.2014, 11:01     Функция и двумерный массив #18
Цитата Сообщение от Тамика Посмотреть сообщение
Так в чём проблема?
Да нет проблемы, мне просто самому было интересно, и один вариант вон уже предложили, а тут пришла...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 11:03     Функция и двумерный массив
Еще ссылки по теме:

Функция и двумерный массив C++
C++ Функция выводить на печать одномерный и двумерный массив
C++ Функция, возвращающая указатель на двумерный массив

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

Или воспользуйтесь поиском по форуму:
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
13.06.2014, 11:03     Функция и двумерный массив #19
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Да нет проблемы, мне просто самому было интересно, и один вариант вон уже предложили, а тут пришла...
Пришла. И предложила свой. Ага.
Yandex
Объявления
13.06.2014, 11:03     Функция и двумерный массив
Ответ Создать тему
Опции темы

Текущее время: 22:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru