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

Прошу объяснить смысл оператора int** - C++

Восстановить пароль Регистрация
 
IFree Host
Заблокирован
04.02.2012, 02:18     Прошу объяснить смысл оператора int** #1
Встретил в чужом коде следующй оператор: int**
вот в таком контексте:

(динамическое распределение памяти):
C++
1
2
3
4
int** m = new int*[5];
for (int i=0; i<5; i++)
 m[i] = new int[5];
trans(m, 5);
Вопрос: это указатель на указатель?

В учебной литературе я такого не встречал.
Будьте добры, объясните поподробней или дайте ссылку
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2012, 02:18     Прошу объяснить смысл оператора int**
Посмотрите здесь:

C++ Пытался изменить чужую программу, не смог понять смысл оператора стрелочка
Прошу объяснить ввод символов C++
Прошу объяснить код С++ C++
C++ Прошу объяснить работу готовой программы
C++ Прошу объяснить о ссылках,указателях,стрелке -> и двоеточиях :: очень прошу я не понял синтаксис
C++ В чем смысл двух перегрузок одного оператора?
Объяснить на примере работу оператора ветвления if else C++
Нюансы синтаксиса: объяснить смысл записи (struct sockaddr *)&their_addr C++
C++ Привести примеры использования и объяснить, в чём суть оператора ^=
C++ Объяснить работу оператора switch
Конструктор копирования (объяснить принцип и смысл) C++
C++ Прошу объяснить первую строку

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1740 / 1083 / 70
Регистрация: 13.09.2011
Сообщений: 3,103
04.02.2012, 02:25     Прошу объяснить смысл оператора int** #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от IFree Host Посмотреть сообщение
Вопрос: это указатель на указатель?
Да. В литературе есть, инфа 146%
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
04.02.2012, 02:51     Прошу объяснить смысл оператора int** #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
int** это не оператор, а тип. Указатель на указатель типа int.
Цитата Сообщение от IFree Host Посмотреть сообщение
int** m = new int*[5];
for (int i=0; i<5; i++)
m[i] = new int[5];
Рассуждаем так.
new выделяет память. Тут написано [5]. Ага, значит массив из пяти элементов. Теперь смотрим тип.
Тип int*, т.e. указателей. Т.е. выделяется память под массив указателей.
Дальше каждому указателю этого массива присваивается адрес массив, под который выделяется память в строке
C++
1
 m[i] = new int[5];
Теперь вопрос почему int**, а не что-то другое.
Вообще указатель m нам нужен для того, чтобы иметь доступ до массива указателей( а имея доступ к этому массиву указателей, получим доступ к массивам чисел) и потом освободить всю выделенную память.
Адрес он и в африке адрес. Что в int* m, что в int* m адрес будет один и тот же.
Но что будет, если указатель будет такой
C++
1
int*m = new int*[5];
Попробуем обратиться к элементу двумерного массива, под который выделяется память.
Допустим,
C++
1
m[1][2]
- это эквивалентно
C++
1
*(*(m+1)+2)
тут разыменовывается указатель m аш два раза. А т.к. тип у указателя m - int*, то такое не возможно.
А под такую задачу подходит тип int**.
Вообще что тут происходит
C++
1
*(*(m+1)+2)
m - это указатель, т.е. адрес.
указатель(адрес) складывается с единицей. Получается указатель на второй элемент массива типа int*, т.е. на второй указатель в этом массиве. Теперь разыменовываем *(m+1), т.е. получаем доступ к этому второму указателю(адресу).
Теперь по аналогии с предыдущем. *(m+1) - это тот самый второй указатель.
Складываем этот указатель(адрес) с двойкой. Получаем указатель на третий элемент массива типа int, т.е. на третье число в этом массиве.
Разыменовываем и получаем это число.
IFree Host
Заблокирован
04.02.2012, 11:19  [ТС]     Прошу объяснить смысл оператора int** #4
Chelioss, спасибо за ответ! Просто супер!
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.02.2012, 12:24     Прошу объяснить смысл оператора int** #5
Цитата Сообщение от IFree Host Посмотреть сообщение
Встретил в чужом коде следующй оператор: int**
Это не оператор. int - имя типа, * - признак указателя. То есть int** - тип указателя на указатель на int.
IFree Host
Заблокирован
04.02.2012, 16:50  [ТС]     Прошу объяснить смысл оператора int** #6
taras atavin, ну и ты тоже, молодец
Yandex
Объявления
04.02.2012, 16:50     Прошу объяснить смысл оператора int**
Ответ Создать тему
Опции темы

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