Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
#1

Использование возвращенного двумерного массива. - C++

18.05.2011, 15:33. Просмотров 572. Ответов 11
Метки нет (Все метки)

Доброго времени суток. Проблема такая.


int *roc(int a[n][n])
{
//тут преобразования
return *a;
}

void main
{
int *p=roc(a);
вопрос. Как через указатель р обратится к любому элементу матрицы?
типо p[1][2]=(но это не работает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2011, 15:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Использование возвращенного двумерного массива. (C++):

Использование двумерного массива в задаче - C++
В двумерном массиве поменять местами строки , содержащие максимальный и минимальный элементы.:)

Использование динамического двумерного массива - C++
Вот есть такой заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H template<typename TT> ...

Использование двумерного динамического массива - C++
Здравствуйте, уважаемые форумчане. Такой вопрос: я объявил двумерный дин. массив, выделил, память, сделал с ним что-то int **arr =...

Обработка двумерного массива с использование пользовательских функций - C++
Помогите пожалуйста не могу понять в чем дело 1.Консольный ввод/вывод вещественного массива размером 5*5. 2.Определение номера первого...

Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива. - C++
Транспонировать матрицу через ввод вывод функции двумерного массива.Сначала вывести ее,а потом провести транспонирование.

Найти номер строки и столбца двумерного массива для минимального элемента этого массива - C++
Visual C ++ 2005 Express Edition помогите пожалуйста

11
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
18.05.2011, 15:43 #2
Цитата Сообщение от Гамбит Посмотреть сообщение
nt *roc(int a[n][n])
- тут ты возвращаеш одномерный масив, возвращай двохмерный
int **roc(int a[n][n])
{
//тут преобразования
return a;
}
void main
{
int **p=roc(a);
вопрос. Как через указатель р обратится к любому элементу матрицы?
типо p[1][2]=(работает)
0
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
18.05.2011, 16:13  [ТС] #3
Цитата Сообщение от while(i)k++ Посмотреть сообщение
- тут ты возвращаеш одномерный масив, возвращай двохмерный
int **roc(int a[n][n])
{
//тут преобразования
return a;
}
void main
{
int **p=roc(a);
вопрос. Как через указатель р обратится к любому элементу матрицы?
типо p[1][2]=(работает)
Во-первых у меня программа возвращает двумерный массив. Проверено.
Во-вторых ваш вариант не работает.
В-третьих вопрос был в другом
0
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
18.05.2011, 19:38 #4
Цитата Сообщение от Гамбит Посмотреть сообщение
Во-первых у меня программа возвращает двумерный массив. Проверено.
- int* это одномерный масив, провеверено но вопреки синтаксису

Цитата Сообщение от Гамбит Посмотреть сообщение
Во-вторых ваш вариант не работает.
- значит проблема в чем то другом не предоставленом вами в посте

Цитата Сообщение от Гамбит Посмотреть сообщение
В-третьих вопрос был в другом
- неужели?

если у вас p типа int** то это матрица, p[1][2] лиш сахар для *(*(p+1))+2)
матрица это указатель на указатель p+1 увеличивает указатель на 1, тоисть перемещается на одну ечейку памяти, в которой указатель на начало блока памяти масива интов, розыменовывая ечейку *-кой мы получаем этот указатель, прибавив к нему 2 мы передвигаемся уже в текущем масиве по памяти, розыменовав ище раз мы получаем интовое значение которое там лежит

но у вас тип int* тоисть просто масив в итоге p[1][2] равносильно взять второй элемент масива и увеличить его на 2, думаю не совсем то что вам нада

P.S. ваше алгоритмическое ехидство есть признаком вашей не политкоректности в высказываниях, впреть постарайтесь проявлять уважение
0
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
18.05.2011, 20:42  [ТС] #5
Цитата Сообщение от while(i)k++ Посмотреть сообщение
- int* это одномерный масив, провеверено но вопреки синтаксису

- значит проблема в чем то другом не предоставленом вами в посте

- неужели?

если у вас p типа int** то это матрица, p[1][2] лиш сахар для *(*(p+1))+2)
матрица это указатель на указатель p+1 увеличивает указатель на 1, тоисть перемещается на одну ечейку памяти, в которой указатель на начало блока памяти масива интов, розыменовывая ечейку *-кой мы получаем этот указатель, прибавив к нему 2 мы передвигаемся уже в текущем масиве по памяти, розыменовав ище раз мы получаем интовое значение которое там лежит

но у вас тип int* тоисть просто масив в итоге p[1][2] равносильно взять второй элемент масива и увеличить его на 2, думаю не совсем то что вам нада

P.S. ваше алгоритмическое ехидство есть признаком вашей не политкоректности в высказываниях, впреть постарайтесь проявлять уважение
на return a; выскакивает ошибка Cannot convert ' int[5] *' to ' int**'
0
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
18.05.2011, 21:09 #6
какой компилятор?
0
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
18.05.2011, 21:13  [ТС] #7
борланд с++ версия 3.1
0
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
18.05.2011, 21:19 #8
ок, ща на роботе, нет компилятора, дома посмотрю

борланд с++ версия 3.1 - под ДОС такой синий интэрфейс?
0
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
18.05.2011, 23:15  [ТС] #9
он самый

Добавлено через 1 час 53 минуты
ну почему эта ошибка вылезает?????
0
kazak
3057 / 2378 / 160
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
19.05.2011, 04:00 #10
p[i*j_size+j]
0
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
19.05.2011, 04:08 #11
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define N 10
 
typedef int Arrnn_t[N][N];
typedef int (*ArrnnPtr_t)[N];
 
ArrnnPtr_t roc(Arrnn_t a)
{
    ;
    return a;
}
 
int main(void)
{
    Arrnn_t a;
    ArrnnPtr_t p = roc(a);
    return 0;
}
0
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
19.05.2011, 10:33  [ТС] #12
эх а делов то было......в общем ответ такой. просто обращаться к р как к одномерному масииву.=)
Всем спасибо за помощь.
0
19.05.2011, 10:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2011, 10:33
Привет! Вот еще темы с ответами:

Метод-член класса для создания одномерного массива из отрицательных элементов двумерного динамического массива - C++
Помогите, пожалуйста, нужно разработать метод-член класса для создания одномерного массива из отрицательных элементов двумерного...

залить из двумерного массива данные в одномерный длиной, равной количеству всех элементов исходного массива - C++
Доброго времени суток :) Образовался новый глупый вопрос... Предположим у меня есть двухмерный массив: vertex** massiv() { ...

Удалить из двумерного массива элементы другого массива - C++
Всем доброе время суток) Сегодня столкнулся с таким заданием: нужно Ввести с клавиатуры прямоугольную матрицу и вектор целых чисел. Найти...

Написать программу, которая вычисляет сумму элементов двумерного массива по столбцам. Организовать ввод массива с клавиатуры по строкам - C++
Написать программу, которая вычисляет сумму элементов двумерного массива по столбцам. Организовать ввод массива с клавиатуры по строкам.


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru