Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2010, 11:14   #1
Exeil
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 24
По умолчанию Возвращение двухмерного массива из функции

Всем привет, я запутался тут совсем, ошибку выдает:

Код:
int MAX, ***A, *LinksA; //для массива A два указателя для размерности
//и еще один для передачи туда массива из функции Function

int* Function(int *LinksArr)
{
    int **arr; //двухмерный динамический массив

    //действия с динамическим массивом arr, где arr получит размерность

    return *arr;
 }

int main()
{
//тут динамическим массивам A и LinksA придается размерность
*A = Function(LinksA); //ну собственно само присваивание
//но пишет ошибку что то вроде не могу конвертировать int* в int**....
}
Exeil вне форума Ответить с цитированием
Старый 24.10.2010, 11:25   #2
Xeonc
Форумчанин
 
Регистрация: 20.10.2010
Сообщений: 143
По умолчанию

Код:
int MAX, *A, *LinksA; //для массива A два указателя для размерности
//и еще один для передачи туда массива из функции Function

int* Function(int *LinksArr)
{
    int **arr; //двухмерный динамический массив

    //действия с динамическим массивом arr, где arr получит размерность

    return *arr;
 }

int main()
{
//тут динамическим массивам A и LinksA придается размерность
A = Function(LinksA); //ну собственно само присваивание
//но пишет ошибку что то вроде не могу конвертировать int* в int**....
}
451 -870-7(три)6. Выполняю работы на заказ, гарант честности - ВМ аттестат с 60+ БЛ без претензий
Xeonc вне форума Ответить с цитированием
Старый 24.10.2010, 11:46   #3
Exeil
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 24
По умолчанию

хм а как тогда придать размерность для двухмерного динамического массива A, если там только один указатель?

Последний раз редактировалось Exeil; 24.10.2010 в 11:51.
Exeil вне форума Ответить с цитированием
Старый 24.10.2010, 11:50   #4
Xeonc
Форумчанин
 
Регистрация: 20.10.2010
Сообщений: 143
По умолчанию

**A = Function(LinksA); //ну собственно само присваивание

попробуй тогда так. Когда компилятор начинает ругаться подобными еррорами - смотри где ты чего-то не учел. Насчет логичности всего этого - фиг знает, с динамикой пока не очень дружу
451 -870-7(три)6. Выполняю работы на заказ, гарант честности - ВМ аттестат с 60+ БЛ без претензий
Xeonc вне форума Ответить с цитированием
Старый 24.10.2010, 11:56   #5
Exeil
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 24
По умолчанию

спасибо за помощь
Exeil вне форума Ответить с цитированием
Старый 24.10.2010, 12:18   #6
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Пример на всякий случай:
Код:
#include <iostream.h>

int** get(int** array, int n)
{
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
			array[i][j] = 3;

	return array;
}

int main()
{	
	int** a;
	int n = 3;

	a = new int*[n];
	for(int k = 0; k < n; k++)
		a[k] = new int[n];

	int **b = get(a, n);

	for(int i = 0; i < n; i++){
		for(int j = 0; j < n; j++)
			cout << b[i][j];

			cout << "\n";
	}

	for(int h = 0; h < n; h++)
		delete[] a[h];

	delete[] a;

	return 0;
}
profi вне форума Ответить с цитированием
Старый 24.10.2010, 12:22   #7
Exeil
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 24
По умолчанию

profi пример полезный, но только я чет не понял что задает размерность у int **b =)
Exeil вне форума Ответить с цитированием
Старый 24.10.2010, 12:24   #8
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Вот этот код:
Код:
	a = new int*[n];
	for(int k = 0; k < n; k++)
		a[k] = new int[n];
выделение памяти для двухмерного массива.
profi вне форума Ответить с цитированием
Старый 24.10.2010, 12:28   #9
Exeil
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 24
По умолчанию

ну да, но это же выделение памяти для массива "a" а не для "b"...

п.с.:
Код:
int main()
{	//инициализация переменной
	int** a;
	int n = 3;
           //выделение памяти для массива "a"
	a = new int*[n];
	for(int k = 0; k < n; k++)
		a[k] = new int[n];

           //присваивание возврат функции в массив "b"
	int **b = get(a, n);

           //вывод содержимого b
	for(int i = 0; i < n; i++){
		for(int j = 0; j < n; j++)
			cout << b[i][j];

			cout << "\n";
	}
            //удаление массива а
	for(int h = 0; h < n; h++)
		delete[] a[h];

	delete[] a;

	return 0;
}
тут массив а и b никак не связанны...

Последний раз редактировалось Exeil; 24.10.2010 в 12:34.
Exeil вне форума Ответить с цитированием
Старый 24.10.2010, 12:31   #10
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Когда я выделяю память я и задаю его размерность. Для массива "b" не нужно ничего выделять, мы же возвращаем указатель с помощью функции get(), на уже выделенную память.
profi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возвращение объекта из функции класса atenon Общие вопросы C/C++ 9 19.05.2010 03:24
Возвращение функцией массива GonZaleZ Общие вопросы C/C++ 7 21.09.2009 13:56
Сортировка строк двухмерного массива EfiopianDIMON Общие вопросы C/C++ 9 26.05.2009 22:52
Сортировка вставками двухмерного массива ponchikpk Помощь студентам 6 09.03.2009 13:34
Возвращение массива символов char ActioNs Общие вопросы C/C++ 3 10.01.2009 02:33