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

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

Восстановить пароль Регистрация
 
Jeerj
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 41
19.05.2013, 21:01     Функция и двумерный массив #1
Как использовать в качестве аргумента функции двумерный массив?
Все не могу понять, пожалуйста напишите с маленьким примером, чтобы понятно было )
Заранее спасибо )
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 21:01     Функция и двумерный массив
Посмотрите здесь:

C++ Двумерный массив и функция
Функция и двумерный массив. C++
двумерный массив и функция! C++
Функция возвращает двумерный массив C++
Функция, принимающая двумерный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.05.2013, 21:02     Функция и двумерный массив #2
А как ты пробовал?
Jeerj
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 41
19.05.2013, 21:18  [ТС]     Функция и двумерный массив #3
lazybiz,

C++
1
2
3
4
5
6
int N;
int **A = new int*[N];
for(int i=0; i<N; i++)
{
   A[i] = new int [N];
}
Я знаю что вне функции делается все так.
А как это сделать в функции не знаю
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.05.2013, 21:25     Функция и двумерный массив #4
C++
1
2
3
4
5
void my_func( int **array )
{
    array[0][0] = 123;
    ...
}
Jeerj
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 41
19.05.2013, 21:31  [ТС]     Функция и двумерный массив #5
lazybiz,
А как вызвать функцию? Используя этот массив в качестве аргумента
C++
1
2
3
A[3][3]={1,2,3,
         4,5,6,
         7,8,9};
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.05.2013, 21:42     Функция и двумерный массив #6
В параметре всегда должен присутствовать размер массива, исключение - размер первого "подмассива", его размер можно не указывать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int A[3][3] = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 } };
 
void test( int a[][3] )
{
    // ...
}
 
int main()
{
    test( A );
    return 0;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.05.2013, 22:41     Функция и двумерный массив #7
Цитата Сообщение от lazybiz Посмотреть сообщение
В параметре всегда должен присутствовать размер массива
Актуально только для массивов на стеке. Для динамических достаточно только указателя для осуществления компиляции.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
19.05.2013, 22:50     Функция и двумерный массив #8
Tulosba, ну и как потом удалять будешь?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.05.2013, 22:53     Функция и двумерный массив #9
Цитата Сообщение от daslex Посмотреть сообщение
ну и как потом удалять будешь?
какое это имеет отношение к передаче массива в функцию?
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
19.05.2013, 22:57     Функция и двумерный массив #10
Прямое.
Цитата Сообщение от Tulosba Посмотреть сообщение
Для динамических
не было бы этих слов, я бы не спросил.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.05.2013, 23:25     Функция и двумерный массив #11
daslex, я не просто так добавил фразу:
Цитата Сообщение от Tulosba Посмотреть сообщение
для осуществления компиляции
Понятно, что для использования массива так и или иначе надо знать его размеры. Но имея дело со статическим массивом размерности 2+, придется и на этапе компиляции знать его размеры. Для динамического такого требования нет.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
19.05.2013, 23:33     Функция и двумерный массив #12
Tulosba, если в функция будет принимать массив как указатель на указатель, то ничто и никто не будет знать его (массива) размеры, ибо sizeof по указателю будет работать не для размера массива, а только и только для размера указателя. Размер указателя не есть размер массива.

Поэтому в массив функции нужно сообщать размер для любого динамического массива (Одномерный он, двумерный, n-мерый).
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.05.2013, 23:39     Функция и двумерный массив #13
Цитата Сообщение от Tulosba Посмотреть сообщение
Для динамического такого требования нет.
Согласен. Мой ответ был не полным.

Добавлено через 1 минуту
Цитата Сообщение от daslex Посмотреть сообщение
Tulosba, если в функция будет принимать массив как указатель на указатель, то ничто и никто не будет знать его (массива) размеры
Можно вместе с динамическим массивом в функцию передать и его размер.

Добавлено через 3 минуты

Не по теме:

Туфтология: Если в функцию передать статический массив, то его размеры тоже никто не будет знать! Тогда как с ним работать?)

daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
19.05.2013, 23:58     Функция и двумерный массив #14
Tulosba, я не буду больше с вами спорить в этой теме. Для того, чтоб скомпилировать много чего не обязательно и незнающий человек может подумать, если оно необязательно, то да ну его на ... , без этого ведь короче.

Добавлено через 9 минут
Цитата Сообщение от lazybiz Посмотреть сообщение
Туфтология: Если в функцию передать статический массив, то его размеры тоже никто не будет знать! Тогда как с ним работать?)
Кривая идея и кривой код разумеется :-D
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cmath>
#include <iomanip>
#include <iostream>
 
void func(int A[])
{
    for (int i=0;i<10;i++) std::cout<<A[i]<<"\n"; //и так по миллиону функций число прописать, а потом узнать, что на 1 ошибся
}
 
int main()
{
    int A[10]={1,2,3,4,5,6,7,8,9,10};
    func(A);
 
    std::cin.get();
 
    return 0;
}
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
20.05.2013, 00:03     Функция и двумерный массив #15
Ну тут подходов много.. Можно определить глобальную константу/макрос, можно передать параметром, можно на удачу писать вручную)
Миллионы функций с массивом в параметре говоришь?)... Таких ср*ным веником гнать надо))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 02:55     Функция и двумерный массив
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
20.05.2013, 02:55     Функция и двумерный массив #16
Лучше и правильнее всего - передавать динамический массив, можно определить глобальную константу, можно макрос, можно передавать строго заданного размера, но это уже одноразовые решения, в отличии от первого.
Yandex
Объявления
20.05.2013, 02:55     Функция и двумерный массив
Ответ Создать тему
Опции темы

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