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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2011, 00:55   #1
_J_
Пользователь
 
Аватар для _J_
 
Регистрация: 02.12.2011
Сообщений: 13
По умолчанию Возвращение из функции указателя на двумерный массив

Учебная задача на С.
Код HTML:
Написать программу, которая осуществляет добавление строки или столбца
в любое место двумерной матрицы по выбору пользователя.
Уважаемые программисты, необходим совет (зеленым и красным цветом обозначил где совет необходим), пока-что для создания строки. Не включил в код часть программы и функций для удаления массивов дабы не засорять код.
Код:
#include <iostream>
#include <time.h>
using namespace std;
int AddString (int **iMas, int *iN, int *iM, int *NumberString);
void main()
 {
	setlocale (LC_CTYPE, "Russian");
	srand((unsigned)time(NULL));
	//Размер массива
 	int iN=5, iM=7;
	//Сам массив
	int **iMas=new int *[iN];
	for (int i=0;i<iN;i++)
		iMas[i]=new int [iM];
	//Инициализация массива
	for (int i=0;i<iN;i++)
		for (int j=0;j<iM;j++)
			iMas[i][j]=rand()%20+1;
        //После какой строки вставлять пустую строку
	int iNumberString=3;

//Здесь необходимо объявить указатель на двумерный массив и записать в него возвращаемый указатель функции
//Мой вариант:
        int **iMas1;
	**iMas1 = AddString(iMas,&iN,&iM,&iNumberString);
//При таком варианте при передаче в функцию вывода на экран указателя нифига не выводится, видимо указатель пустой или что-то не то.

}
int AddString (int **iMas, int *iN, int *iM, int *NumberString){
	//Добавляем строку
	*iN+=1;
	//Создаем массив из iN+1 строк (исходный + пустая строка)
	int **iMas1=new int *[*iN];
	for (int i=0;i<*iN; i++)
		iMas1[i]=new int [*iM];
	//Заполняем массив
	for (int i=0;i<*iN;i++){
		for (int j=0;j<*iM;j++){
			if (i==*NumberString)
				iMas1[i][j]=0;
			else{
				if (i>*NumberString){
					iMas1[i][j]=iMas[i-1][j];
				}
				else
					iMas1[i][j]=iMas[i][j];
			}
		}
	}
        //И здесь необходима консультация, как возвращать указатель на массив! Мой вариант:
	return **iMas1;
}

Последний раз редактировалось _J_; 29.12.2011 в 01:13.
_J_ вне форума Ответить с цитированием
Старый 29.12.2011, 01:32   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Код:
        int **iMas1 = AddString(iMas,&iN,&iM,&iNumberString);
...
int** AddString(...
...
return iMas1;
разыменовавая указатели ты получаешь статический элемент!

Цитата:
(int **iMas, int *iN, int *iM, int *NumberString){
а это вас в универе учат передать ВСЕ параметры через указатели?
onewho вне форума Ответить с цитированием
Старый 29.12.2011, 01:34   #3
_J_
Пользователь
 
Аватар для _J_
 
Регистрация: 02.12.2011
Сообщений: 13
По умолчанию

Благодарю за совет. Сейчас буду пробовать.
В универе учат тема за темой. Данная тема про указатели, поэтому необходимо пользоваться максимум указателями, дабы изучить и вникнуть. Вот пытаюсь их везде тулить
_J_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции, указатели, двумерный массив MovsesIV Общие вопросы C/C++ 8 18.12.2010 23:19
Функции и двумерный массив stas135642 Общие вопросы C/C++ 1 29.11.2010 10:48
возвращение функции значения TStringSream Lokos Общие вопросы Delphi 6 24.11.2010 12:42
Функции, Двумерный массив, Записи, Файлы Goroh Паскаль, Turbo Pascal, PascalABC.NET 1 21.06.2010 14:36
2 задачи, двумерный массив, процедуры&функции mAveRik Помощь студентам 1 18.12.2008 19:01