![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Fritz |
|
|||
|
Unregistered |
Люди расскажите как пользоваться указателями, для чего нужны...
|
|||
|
||||
| mr.DUDA |
|
||||||||||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Не нужно дублировать один вопрос в двух темах !!! Теперь - ответ.
Указатель - это переменная особого типа, хранящая в себе адрес памяти. По указателю можно получить или модифицировать значение переменной, хранящейся по "указываемому" адресу. Изменяя (двигая) значение указателя, можно работать с переменными, хранящимися в памяти по различным адресам. Для того, чтобы компилятор мог знать тип переменной, адресуемой указателем, указатель имеет тип, например указатель на int, на float, на структуру CString... Для объявления переменной типа "указатель" используется тот же синтаксис, что и для объявления обычной переменной, только с небольшим отличием в виде звёздочки:
Чтобы настроить указатель на адрес какой-то переменной, используется операция "&":
Чтобы получить или модифицировать переменную по адресу, хранящемуся в указателе, используется операция звёздочка (но уже по-другому):
Указатель может указывать (простите за тавтологию) на переменную любого типа, в том числе - на переменную типа "структура" (или "объект класса"). Для доступа к отдельным полям структуры, адресуемой указателем, используется операция "стрелка":
Там, где идёт работа с динамически выделяемой памятью, не существует другого способа записи/чтения данных (переменных) в память, кроме указателей. Если например нужно выделить память (с пом. оператора "new") для переменной типа int, а потом записать в неё значение, то действия будут такими:
Наконец, с массивами в С/С++ можно работать не только с помощью квадратных скобок (т.е. индексов), но и с помощью указателей, так как указатель и массив - это на самом деле синонимы (имя массива является указателем на первый элемент массива), пример:
Здесь обязательно нужно сказать о том, что получится, если к указателю прибавить, например, единицу. Дело в том, что в указателе (как было сказано в начале) хранится адрес переменной. И если не ставить перед именем указателя звёздочку, то с помощью арифметических операций можно увеличить или уменьшить значение именно адреса, хранящегося в указателе. То есть, для массива из предыдущего примера, можно прибавить к "a" какое-то число и получить результат - указатель. Перед тем, как будет сказано о практической пользе от изменений адреса, нужно запомнить простое правило: прибавляя к указателю единицу, мы сдвигаем его не на один байт, а на столько байт, сколько занимает в памяти ровно одна переменная, адресуемая указателем! То есть, прибавляя единицу к указателю "a" из примера выше, мы получим указатель на второй элемент массива (элементы массива идут в памяти один за другим, по соседним адресам). Далее, если вычесть один указатель из другого - мы получим разницу не в байтах, а в количестве элементов. Примеры:
Будут вопросы, спрашивай. -------------------- ![]() |
||||||||||||||
|
|||||||||||||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
mr.DUDA
Пусть сперва зарегистрируется... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |