Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статичная матрица через указатель на указатель 
:(
    Опции темы
Robix
Дата 9.7.2015, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 1.6.2009

Репутация: нет
Всего: нет



Здравствуйте. Хочу понять, можно ли создать двумерный массив, затем сделать указатель на указатели на его строки и через возвращенный из функции указатель на указатель получить доступ ко всем элементам массива. Можете посмотреть и подправить, что не так. Если возможно )

Код

int MATRIX[2][4] = {{ 1,2,3,4 }, {5,6,7,8 }}; 

int main() {  

    int ** ppMATRIX; 
    int ** GetMatrix(); 

    ppMATRIX = GetMatrix(); 

    for (int i=0; i<2; ++i){
        for (int j=0; j<4; ++j){
                cout <<    ppMATRIX[i][j]; //Хочу вывести элементы массива. Но тут жесткая ошибка. Что-то не так. 
        }
    }    

    return 0;

}

int ** GetMatrix(){

    int ** ppMATRIX;
    int * pMATRIX[2];

    for (int i = 0; i < 2; ++i){
        pMATRIX[i] = MATRIX[i]; //Пытаюсь, чтобы каждый элемент указателя указывал на соотв-щую строку массива
    }

    ppMATRIX = pMATRIX; //Пытаюсь, чтобы на указатель ppMATRIX указывал на массив указателей pMATRIX 
    
    return ppMATRIX;
}


Это сообщение отредактировал(а) Robix - 9.7.2015, 12:23
PM MAIL   Вверх
bsa
Дата 9.7.2015, 13:10 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Robix, идея у тебя правильная, но реализация подкачала. При завершении функции GetMatrix(), память, выделенная под pMATRIX[2] будет освобождена, в итоге ppMATRIX будет ссылаться непонятно на что. В этом случае нужно использовать динамическое выделение памяти (malloc или new).

С другой стороны, в твоем случае нет необходимости для подобных извращений. Так как доступ к любой строке можно получить напрямую: int *p = MATRIX[y]
PM   Вверх
Robix
Дата 9.7.2015, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 1.6.2009

Репутация: нет
Всего: нет



Точно. Спасибо. Если я объявлю int * pMATRIX[2] заранее и потом возвращю int ** ppMATRIX, который объявлен внутри функции, то мой указатель на указатель, который примет результат функции получит адрес  int * pMATRIX[2] ?
Т.е. указатель сам по себе это типа переменная-адрес правильно, можно так сказать?
PM MAIL   Вверх
bsa
Дата 10.7.2015, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



int* pMATRIX[2] - это массив из 2-х элементов int*. Создается в стеке, т.е. существует до выхода из функции.

Указатели и ссылки
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.