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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.81
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,338
#1

Как передать в функцию указатель на двумерный массив заранее неизвестного размера? - C++

29.09.2009, 18:07. Просмотров 4589. Ответов 5
Метки нет (Все метки)

Ребята, скажите пожалуйста, как реализовать такую идею? Необходимо передать в
функцию двумерный массив, чтобы она изменала его элементы. вся загвоздка в том, что,
Количество строк и столбцов массива должны вводиться с клавиатуры
То есть такой код не работает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
//Вот здесь возникает ошибка. Компилятор требует, чтобы я указал число N. А как я
//укажу, если я сам его не знаю заранее?
void func (char a [] [N] ) {
}
 
int main () {
 int M, N;
 char array [M] [N];
 cout<< "Vvedite kolichestvo strok i stolbtsov"<<endl;
 cin>> M;
 cin>> N;
 
 //Такую запись тоже не принимает. Принала бы func (array [M] [N]), но M и N не
 //инициализированы
 func (array);
 
 return 0;
}
Решил обойтись без индексов. Пробовал заменить определение функции таким
C++
1
2
void func (char** a ) {
}
Но и это не помогло. Те же ошибки. Если вызываешь функцию
C++
1
func (array)
То орёт, что не может перекнвертировать один тип в другой. А если так,
C++
1
func (array [M] [N])
То вынь да положь ей значения M и N. Пробовал и явно преобразовать тип
C++
1
func ((char**)array)
Опять лажа. Прога начинает работать и тут же заканчивается аварийно.
Помогите пожалуйста, друзья!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2009, 18:07     Как передать в функцию указатель на двумерный массив заранее неизвестного размера?
Посмотрите здесь:

C++ Можно ли создать вектор заранее неизвестного размера?
C++ Как передать в функцию двумерный массив указателей на класс?
Массив заранее неизвестного размера C++
Передать двумерный массив в функцию C++
C++ Передать двумерный массив в функцию
Как передать двумерный массив в функцию, которая вызывается в main? C++
C++ Как обьявить массив неизвестного размера?
C++ Как передать в функцию заранее неизвестное число параметров?
Как передать в функцию двумерный динамический массив? C++
C++ Как передать массив (двумерный/одномерный вектор) в функцию C++?
Двумерный массив передать в функцию C++
Передать в функцию двумерный массив C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
29.09.2009, 18:18     Как передать в функцию указатель на двумерный массив заранее неизвестного размера? #2
kravam, копай в сторону динамических массивов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
void Func(int **, int n, int m)
{
    /*действия*/
}
int main()
{
    int i, j, n, m;
    std::cin>>n;
    std::cin>>m;
    int **mas = new int*[n];
    for(i = 0; i < n; ++i)
        mas[i] = new int[m];
    /*ввод*/
    Func(mas, n, m);
    /*конец*/ 
}
Rififi
2335 / 1050 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.09.2009, 18:18     Как передать в функцию указатель на двумерный массив заранее неизвестного размера? #3
Как передать в функцию указатель на двумерный массив заранее неизвестного размера?
Никак. В C/C++ массивы всегда имеют фиксированный размер. Можно передать двойной казатель.
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
29.09.2009, 18:21     Как передать в функцию указатель на двумерный массив заранее неизвестного размера? #4
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
//Вот здесь возникает ошибка. Компилятор требует, чтобы я указал число N. А как я
//укажу, если я сам его не знаю заранее?
void func (char **a ) {
}
 
int main () {
 int M, N;
 char **array;
 cout<< "Vvedite kolichestvo strok i stolbtsov"<<endl;
 cin>> M;
 cin>> N;
 
 array = new *char[N];
 for(int i=0; i<M; i++) *array[i] = new char[M];
 //Такую запись тоже не принимает. Принала бы func (array [M] [N]), но M и N не
 //инициализированы
 func (array);
 
 return 0;
}
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
29.09.2009, 21:01     Как передать в функцию указатель на двумерный массив заранее неизвестного размера? #5
попробуй просто в функцию передать две переменные с размерами и уже в самой функции сгенерировать динамический массив размерами этих двух переменных...идея вот прям тока что пришла. Тебе обязательно код написать или сам всё понял?
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,338
29.09.2009, 21:08  [ТС]     Как передать в функцию указатель на двумерный массив заранее неизвестного размера? #6
Тоже вариант... Но я с пока вышеперечисленными примерами разбираюсь... А кто-то в теме про задачники ещё говорил, что зачем решать одинаковые задачи... Этот тот случай, когда без долбёжки не обойтись! Одна такая задача, а потом третья такая же, а потом четвёртая... И так сто штук. Тогда что-то и отложится в голове.
Yandex
Объявления
29.09.2009, 21:08     Как передать в функцию указатель на двумерный массив заранее неизвестного размера?
Ответ Создать тему
Опции темы

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