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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пустое объявление. http://www.cyberforum.ru/cpp-beginners/thread440577.html
Вот на эту строку компилятор ругается "Пустое объявление". В чём может быть причина ? for (int 1=0; i<=15; i=i++) dataGridView5->Rows->Cells->Value = (mass6).ToString(); // mass6 - массив с 16-ю элементами ...
C++ Написал тетрис. Прокомментируйте код пожалуйста ) Программа полностью готова. Все как в тетрисе работает. Немного мигает, не знаю как вывод массива сделать по другому. Прокомментируйте код пожалуйста. Управление : влево - 4 вправо - 6 вращение - 5 в низ - 2 пауза - 0 Спасибо за комментарии ) tetris.h #include <iostream> http://www.cyberforum.ru/cpp-beginners/thread440564.html
C++ Перевод сантиметров в метры
Здравствуйте, недавно начал заниматься С, очень тяжело идет, помогите пожалуйста с задачками. #1 Арифметика:Z=cos^2α+cos^4α Задание: Составить программу, в которой вводится значение сантиметров. Найти и вывести число полных метров. #2 a) С клавиатуры вводится 2 скорости. Одна в км/ч, другая в м/с. Найти и вывести на экран большую скорость.
C++ и снова С++
помогите записать програмку которая сможет написать минимальное количество простых присваиваний, содержащих по одному умножению (без использования других арифметических операций), для вычисления следующих значений (где х - действительное число, ** - возведение в степень). Использовать минимум вспомогательных переменных. х**8.
C++ Как замерить длительность выполнения кода? http://www.cyberforum.ru/cpp-beginners/thread440555.html
Нужно замерить длительность выполнения кода. Как?
C++ Как вставить в двумерный массив "1" случайным образом? В двумерный массив определенного диапазона (рандомная формула не проблема) нужно вставить число 1, причем случайным образом. Есть ли какая-то специальная формула, или после создания массива, таким же образом "влепить" в него 1 ? Что-то не могу понять..... Пы.сы. под формулой имеется ввиду rand()%(min-max+1)+min... подробнее

Показать сообщение отдельно
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
04.02.2012, 02:51     Прошу объяснить смысл оператора int**
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, т.е. на третье число в этом массиве.
Разыменовываем и получаем это число.
 
Текущее время: 16:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru