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

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

Войти
Регистрация
Восстановить пароль
 
Jeerj
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 41
#1

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

19.05.2013, 21:01. Просмотров 524. Ответов 15
Метки нет (Все метки)

Как использовать в качестве аргумента функции двумерный массив?
Все не могу понять, пожалуйста напишите с маленьким примером, чтобы понятно было )
Заранее спасибо )
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 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
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 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
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 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
:)
Эксперт С++
4383 / 3226 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.05.2013, 22:41     Функция и двумерный массив #7
Цитата Сообщение от lazybiz Посмотреть сообщение
В параметре всегда должен присутствовать размер массива
Актуально только для массивов на стеке. Для динамических достаточно только указателя для осуществления компиляции.
daslex
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,479
19.05.2013, 22:50     Функция и двумерный массив #8
Tulosba, ну и как потом удалять будешь?
Tulosba
:)
Эксперт С++
4383 / 3226 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.05.2013, 22:53     Функция и двумерный массив #9
Цитата Сообщение от daslex Посмотреть сообщение
ну и как потом удалять будешь?
какое это имеет отношение к передаче массива в функцию?
daslex
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,479
19.05.2013, 22:57     Функция и двумерный массив #10
Прямое.
Цитата Сообщение от Tulosba Посмотреть сообщение
Для динамических
не было бы этих слов, я бы не спросил.
Tulosba
:)
Эксперт С++
4383 / 3226 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.05.2013, 23:25     Функция и двумерный массив #11
daslex, я не просто так добавил фразу:
Цитата Сообщение от Tulosba Посмотреть сообщение
для осуществления компиляции
Понятно, что для использования массива так и или иначе надо знать его размеры. Но имея дело со статическим массивом размерности 2+, придется и на этапе компиляции знать его размеры. Для динамического такого требования нет.
daslex
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,479
19.05.2013, 23:33     Функция и двумерный массив #12
Tulosba, если в функция будет принимать массив как указатель на указатель, то ничто и никто не будет знать его (массива) размеры, ибо sizeof по указателю будет работать не для размера массива, а только и только для размера указателя. Размер указателя не есть размер массива.

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

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

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

Не по теме:

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

daslex
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,479
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
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 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++
C++ Функция, возвращающая указатель на двумерный массив
Двумерный массив. Функция возвращает мусор C++

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

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

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