Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
G6
2 / 2 / 1
Регистрация: 20.04.2014
Сообщений: 30
1

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2014, 16:45
Ответы с готовыми решениями:

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

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

Двумерный массив и функция
Нууууу плиззз подскажите как сделать в виде отдельной функции????? Borland C++ ...

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

18
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
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
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
12.06.2014, 21:11 7
А нужно чтобы просто по указателю двумерный массив передался в функцию.
void opredelitel(int(*array)[5][5]){}
0
327 / 230 / 55
Регистрация: 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
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
12.06.2014, 21:18 9
Не, это не спортивно . Как все-таки без костылей передать параметром динамический массив?
Динамический в смысле неизвестной размерности - никак. Если функция эту размерность не знает, она не сможет корректно работать с массивом. Динамический в смысле "в динамической памяти" - смотри мой пост выше.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
12.06.2014, 21:28 10
Цитата Сообщение от Renji Посмотреть сообщение
Динамический в смысле неизвестной размерности - никак. Если функция эту размерность не знает, она не сможет корректно работать с массивом. Динамический в смысле "в динамической памяти" - смотри мой пост выше.
Ну вот этот момент и интересует. Конструкция есть, причем довольно давно и уже в стандарте, а механизма ее полноценного использования так и нет.
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
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
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
12.06.2014, 21:40 12
Цитата Сообщение от Renji Посмотреть сообщение
Вы потроха массива себе представляете?
Вполне . Потому и интересуюсь кто как и для чего использует динамические массивы на стеке.
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
12.06.2014, 22:56 13
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Не, это не спортивно . Как все-таки без костылей передать параметром динамический массив?
В чём проблема? Я что-то не поняла. Не вижу Ваших предложений, спортивных, так сказать.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
13.06.2014, 05:18 14
Цитата Сообщение от Тамика Посмотреть сообщение
Не вижу Ваших предложений, спортивных, так сказать.
м.б. оно есть я а не вижу? Разряд не позволяет .
Так-то я и сам могу.
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
13.06.2014, 10:05 15
uglyPinokkio, ну так может стоит сначала свой вариант предложить, а потом выступать? Жду Вашего предложения, маэстро. И попрошу корректно объяснить "неспортивность" моего кода. Н-ну?
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
13.06.2014, 10:42 16
Цитата Сообщение от Тамика Посмотреть сообщение
ну так может стоит сначала свой вариант предложить, а потом выступать?
А не знаю я такого варианта, потому и интересно. И где кто выступает?

Цитата Сообщение от Тамика Посмотреть сообщение
И попрошу корректно объяснить "неспортивность" моего кода. Н-ну?
Замена массива на стеке массивом на куче. Не?
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
13.06.2014, 10:44 17
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Замена массива на стеке массивом на куче. Не?
Человеку нужно передать указатель на двумерный массив. Потому я сотворила из статического массива динамический. Так в чём проблема? Это запрещено? Это UB? Или может есть куча других правильных способов?
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
13.06.2014, 11:01 18
Цитата Сообщение от Тамика Посмотреть сообщение
Так в чём проблема?
Да нет проблемы, мне просто самому было интересно, и один вариант вон уже предложили, а тут пришла...

0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
13.06.2014, 11:03 19
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Да нет проблемы, мне просто самому было интересно, и один вариант вон уже предложили, а тут пришла...
Пришла. И предложила свой. Ага.
0
13.06.2014, 11:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2014, 11:03
Помогаю со студенческими работами здесь

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

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

Двумерный массив. Функция возвращает мусор
Добрый день. Необходимо сгенерировать матрицу и заполнить ее. Написал вот такую функцию ...

Функция, возвращающая указатель на двумерный массив
Добрый день! Столкнулся с конструкцией которую раньше не видел, и не до конца понимаю что это и...

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

Функция - шаблон ,параметр - двумерный массив типа Т .
Как правильно прописать в параметры функции двумерный массив типа Т ?(шаблонная функция) Видел...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru