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

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

Восстановить пароль Регистрация
 
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
18.05.2011, 15:33     Использование возвращенного двумерного массива. #1
Доброго времени суток. Проблема такая.


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

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

Использование двумерного динамического массива C++
залить из двумерного массива данные в одномерный длиной, равной количеству всех элементов исходного массива C++
Найти номер строки и столбца двумерного массива для минимального элемента этого массива C++
C++ Написать программу, которая вычисляет сумму элементов двумерного массива по столбцам. Организовать ввод массива с клавиатуры по строкам
C++ Заменить все элементы массива, попадающие в интервал, нулем. Выполнить двумя способами: с помощью одномерного и двумерного массива.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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]=(работает)
Гамбит
13 / 13 / 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]=(работает)
Во-первых у меня программа возвращает двумерный массив. Проверено.
Во-вторых ваш вариант не работает.
В-третьих вопрос был в другом
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. ваше алгоритмическое ехидство есть признаком вашей не политкоректности в высказываниях, впреть постарайтесь проявлять уважение
Гамбит
13 / 13 / 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**'
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
18.05.2011, 21:09     Использование возвращенного двумерного массива. #6
какой компилятор?
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
18.05.2011, 21:13  [ТС]     Использование возвращенного двумерного массива. #7
борланд с++ версия 3.1
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
18.05.2011, 21:19     Использование возвращенного двумерного массива. #8
ок, ща на роботе, нет компилятора, дома посмотрю

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

Добавлено через 1 час 53 минуты
ну почему эта ошибка вылезает?????
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
19.05.2011, 04:00     Использование возвращенного двумерного массива. #10
p[i*j_size+j]
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2011, 10:33     Использование возвращенного двумерного массива.
Еще ссылки по теме:

1. Написать функцию проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными э C++
C++ Использование динамического двумерного массива
C++ Использование двумерного массива в задаче

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

Или воспользуйтесь поиском по форуму:
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
19.05.2011, 10:33  [ТС]     Использование возвращенного двумерного массива. #12
эх а делов то было......в общем ответ такой. просто обращаться к р как к одномерному масииву.=)
Всем спасибо за помощь.
Yandex
Объявления
19.05.2011, 10:33     Использование возвращенного двумерного массива.
Ответ Создать тему
Опции темы

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